如何在已有的DataTable末尾新增带下拉选择菜单的列
实现逻辑说明
DataTable 本身是内存数据存储结构,不承载UI交互能力,你需要的下拉选择效果需要在将dt绑定到对应UI展示控件(如WinForm的DataGridView、WPF的DataGrid等)时,对控件的CODE列单独配置下拉编辑规则实现。你可以先在DataTable层面加数据校验,避免非法值写入,基础改造后的代码如下:
DataTable dt = new DataTable();// 新建DataTable实例dt foreach (IXLCell cell in row.Cells()) { dt.Columns.Add(cell.Value.ToString()); } if (dt.Columns.Count > 5) //检查是否已存在日期、缩写和OK字段 { DataColumn codeCol = new DataColumn("CODE", typeof(string)); // 设置默认值 codeCol.DefaultValue = "ONE"; dt.Columns.Add(codeCol); // 新增数据校验规则,避免非法值存入DataTable dt.ColumnChanging += (sender, e) => { if (e.Column.ColumnName == "CODE") { string inputVal = e.ProposedValue?.ToString().Trim(); if (inputVal != "ONE" && inputVal != "TWO") { e.Row.CancelEdit(); } } }; } else //若不存在则新增对应字段 { dt.Columns.Add(new DataColumn("OK", typeof(bool))); dt.Columns.Add(new DataColumn("Datum", typeof(string))); dt.Columns.Add(new DataColumn("Kürzel", typeof(string))); }
不同UI框架的下拉列配置参考
- WinForm DataGridView 绑定场景
绑定DataTable后将默认生成的CODE文本列替换为下拉列即可:dataGridView1.DataSource = dt; // 移除自动生成的文本列 dataGridView1.Columns.Remove("CODE"); // 新增下拉选择列 DataGridViewComboBoxColumn codeComboCol = new DataGridViewComboBoxColumn(); codeComboCol.HeaderText = "CODE"; codeComboCol.DataPropertyName = "CODE"; // 和DataTable的CODE列绑定 codeComboCol.Items.AddRange("ONE", "TWO"); codeComboCol.DefaultCellStyle.NullValue = "ONE"; // 添加到列集合最后 dataGridView1.Columns.Add(codeComboCol); - WPF DataGrid 绑定场景
在XAML的DataGrid列定义中添加DataGridComboBoxColumn,将ItemsSource设置为["ONE","TWO"],绑定选中值到CODE字段即可。 - ASP.NET GridView 绑定场景
在GridView列配置中添加模板列,内嵌DropDownList控件绑定可选值即可。
内容的提问来源于stack exchange,提问作者and95y
相关产品推荐
相关产品推荐

