C# :: WPF Cascading DataContext Like With DataGrid?
Dec 15, 2014
I'm trying to create custom WPF control, similar to DataGrid. DataGrid was great as a base class for a different custom control I needed, because I could do something like this:
public class Person
{
public string Name {get; set;}
public string Phone {get; set;}
public string Email {get; set;}
}
... and I can reuse it elsewhere with collections of different type, binding its properties to columns of different width and style.
What I need now is something similar, but differs in a way, that DataGrid is no longer good fit for the base class.
What I'm interested in is: how does DataGrid "tell" the columns in Columns collection, to have the type of ItemsSource bound collection as a DataContext? How does the Name property of Person class become available to the column in DataGrid.Columns?
I am trying to get a datagrid working in my program with populating a simple set of data. Which i can then expand on and bring in data from a database.
But even this little simple test datagrid does not seems to be working.
I have been struggling to implement a method for reading data from SQL server to my C# program. In the C# program I prepared a DataGrid (not a DataGridView) for the data to be shown in it using a button "Load Table". Now I just want to read a table which has 4 different columns which I also added to the DataGrid.
I have a DataAccessDB class and this is the code for establishing a connection:
const string DB_CONNECTION = @"It is known to me"; SqlConnection con; SqlCommand cmd; Controller myController;
Then, there is a code to reference controller:
public DataAccessDB(Controller refController) { con = new SqlConnection(DB_CONNECTION); cmd = new SqlCommand(); cmd.Connection = con; cmd.CommandType = CommandType.StoredProcedure; myController = refController; }
And this is the code for a List which I am going to use for filling the data to a DataGrid:
public List<ProductionStock> GetProductionStockFromDB() { int productionStockId, amount; decimal price; string name, descript;
[code]....
And now the main part - how to read the data when I press a LoadTable button. The point here is that I already defined connection strings here as you can see, and in the method itself I guess I should not repeat it. The tutorials I have seen they do it everything in that one button.
the code works and produce a table and fills the grid, what im trying to do is get this information into a DataGrid, so i can get rows selected by user. ive tried many ways ie convert the list into a datatable and display but produces errors, ive done the following,
ive added the HTML code to set up the datagrid, which i can see via design tab, but filling it up is harder.
i uderstand it needs a
protected System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1; sqlDataAdapter1.Fill();// where it require a dataset or datatable DataGridProduct.DataBind();
as it requires a datatable i converted the list to a datatable when i run it it says null, im not sure where im going wrong, i noe the list works as i tried populating on a table.
public static DataTable ToDataTable<T>(List<T> items) { }
I have a datagrid, which has a column called Status. In the database, the field is a text field that can have the values up, down, or danger.
I needed to display the status as a "light" as per client request, so I have a StatusToImageConverter class that receives the status, and returns the proper image to display in the datagrid column. Works fine.
Now the issue I am having... I have a combo box above the datagrid for the user to filter the results if desired. The filtering works fine, but the newly displayed devices do not have their status light. In the Status column, nothing appears after the user filters. I think it may have to do with the fact that I am not re-initializing the datagrid, but just refreshing it? That's just my educated guess.
XAML: In the UserControl Resources:
<local:StatusToImageConverter x:Key="ImageConverter" /> In the DataGrid Control: <DataGridTemplateColumn Header="Status" IsReadOnly="True"> <DataGridTemplateColumn.CellTemplate>
I want to be able to keep on adding a row to my datagrid every time i click a button, the row will hold the text of the text box and the combobox in its individual cells, is there a way to do this without inserting a ridiculous amount of code?
I have made a datagrid in a WPF and added a button to add rows, here is the code for that:
this.itemListDataGrid.Items.Add(new TextBox());
Also, I have already got 3 colums in the datagrid pre-added by me, so when the rows are added I click on one to edit it and it comes up with error edit item not allowed.
but when i select a collumn, i recive an error because i'm selecting a cell with the mouse and i dont have code for that selection. My question is how can i put an "if" on the beguining of the event so that he can determine if it's a header or not.
In my WPF application I created a LINQ to SQL entities class. Then I created a partial class and there add code to my entity class. Below is the code of it:
Then I executed LINQ to SQL. Works perfectly well. Then I bound WPF Datagrid radiobutton column to is_selected property of the partial class. Below is XAML code:
And here I have the problem. When I'm changing the radiobutton status from Unchecked to Checked it doesn't change the value of is_selected property from false to true in the partial class. I don't know why.
How do I bind a DATE column in a DataGridView Control to a DatePicker control (using C#)? I already have the DataGridView control bound to a database stored procedure which takes a DATE value as a parameter and selects joining table based on the results.