【发布时间】:2017-04-01 02:33:40
【问题描述】:
我在 WPF 表单上有一个 DataGrid,它的 ItemsSource 属性设置为 DataTable。这个DataTable 是从一个SQLite 表中填充的,我正在使用一个DataGridTemplateColumn 来显示其中一个列,该ComboBox 填充了一个ComboBox。 ComboBox 正确显示了 DummyClass 类中的 DisplayMember(字符串)和 SelectedValue(整数)。但是,当我从 ComboBox 中选择一个值时,DataGrid 在行旁边显示验证错误(红色感叹号)。
我为 ComboBox 的选择更改添加了一个事件处理程序,以便我可以查看验证错误。验证错误为:
无法转换值“1”。
其中“1”是刚刚在ComboBox 中选择的任何索引。
是什么导致了这个验证错误?
InitializeComponent();
DummyClassCollection = new ObservableCollection<DummyClass>();
DummyClassCollection.Add(new DummyClass() { DisplayValue = "Item1", SelectedValue = 0 });
DummyClassCollection.Add(new DummyClass() { DisplayValue = "Item2", SelectedValue = 1 });
table = new DataTable();
dgData.ItemsSource = table.DefaultView;
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
DataTemplate dataTemplate = new DataTemplate();
FrameworkElementFactory control = new FrameworkElementFactory(typeof(ComboBox));
control.SetValue(ComboBox.ItemsSourceProperty, DummyClassCollection);
control.SetValue(ComboBox.DisplayMemberPathProperty, "DisplayValue");
control.SetValue(ComboBox.SelectedValuePathProperty, "SelectedValue");
control.AddHandler(ComboBox.SelectionChangedEvent, new SelectionChangedEventHandler(ComboBox_SelectionChanged));
Binding b = new Binding();
b.Path = new PropertyPath("tableID");
b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
b.Mode = BindingMode.TwoWay;
control.SetBinding(ComboBox.SelectedValueProperty, b);
dataTemplate.VisualTree = control;
templateColumn.CellTemplate = dataTemplate;
//dgData.AutoGenerateColumns = false;
dgData.Columns.Add(templateColumn);
string connection = @"Data Source = " + database + "; Version=3; foreign keys=true;";
sqlc = new SQLiteConnection(connection);
sqlcmd = new SQLiteCommand("SELECT * FROM tblExample", sqlc);
adapter = new SQLiteDataAdapter(sqlcmd);
sqlcmdb = new SQLiteCommandBuilder(adapter);
adapter.InsertCommand = sqlcmdb.GetInsertCommand();
adapter.UpdateCommand = sqlcmdb.GetUpdateCommand();
adapter.DeleteCommand = sqlcmdb.GetDeleteCommand();
adapter.AcceptChangesDuringUpdate = true;
adapter.Fill(table);
templateColumn.Header = table.Columns[1].ColumnName;
【问题讨论】:
标签: c# wpf sqlite combobox datagrid