I have a WPF (.NET 4) DataGrid
backed by a DataView
from a DataTable
, which has as one of its columns a DataGridComboBoxColumn
. Everything is working for me, but I had to create a new class to hold the contents of what is a simple [ArrayList
/List<string>
/whatever IEnumerable
I can try] for the possible values of the DGCBC, when it seems like there should be a less-convoluted way. Here is my XAML:
<Window x:Class="MASTableMaint.TruckloadLimitsEdit"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Edit Truckload Limits" Height="600" Width="460" MinWidth="300" MinHeight="300" WindowStartupLocation="CenterOwner" >
<DockPanel LastChildFill="True">
<DataGrid Name="TruckloadGrid" ItemsSource="{Binding}" CanUserReorderColumns="False" CanUserResizeRows="False" CanUserSortColumns="False"
AutoGenerateColumns="False" RowHeaderWidth="20">
<DataGrid.Columns>
<DataGridComboBoxColumn x:Name="companyIdColumn" Header="Company" SelectedValueBinding="{Binding Path=CompanyID}"
DisplayMemberPath="TheCompanyID" SelectedValuePath="TheCompanyID"/>
...
</DataGrid.Columns>
</DataGrid>
</DockPanel>
</Window>
And my code behind:
namespace MASTableMaint
{
public partial class TruckloadLimitsEdit : Window
{
private DataTable truckloadDT = new DataTable();
private SqlDataAdapter truckloadDA;
private SqlConnection sqlconn;
public TruckloadLimitsEdit(List<string> massCompanies)
{
sqlconn = new SqlConnection(Constants.SqlConnectionStr);
if (!DbUtils.OpenDbConn(sqlconn))
{
sqlconn.Dispose();
return;
}
string query = "SELECT * FROM tTruckload ORDER BY CompanyID";
truckloadDA = new SqlDataAdapter(query, sqlconn);
truckloadDA.Fill(truckloadDT);
SqlCommandBuilder builder = new SqlCommandBuilder(truckloadDA);
InitializeComponent();
DataView truckloadDV = new DataView(truckloadDT, null, null, DataViewRowState.CurrentRows);
TruckloadGrid.ItemsSource = truckloadDV;
ObservableCollection<MassCompany> ocMassCompanies = new ObservableCollection<MassCompany>();
foreach (string company in massCompanies)
{
ocMasCompanies.Add(new MassCompany(company));
}
companyIdColumn.ItemsSource = ocMassCompanies;
}
...
}
public class MassCompany
{
public MassCompany(string company)
{
TheCompanyID = company;
}
public string TheCompanyID { get; set; }
}
}