如何设置C# DataGridViewTextBoxColumn的值?复杂DataGridView场景求助
给DataGridViewTextBoxColumn设置值的解决方案
嘿,我看你已经搭好了DataGridView的基础配置,现在要搞定给DataGridViewTextBoxColumn设置值的问题对吧?其实核心思路就是通过绑定的DataTable来传递数据,因为你已经把列和DataTable的字段做了映射(DataPropertyName),我给你一步步理清楚:
关键前提确认
你代码里已经做了最关键的一步:把DataGridViewTextBoxColumn的DataPropertyName和DataTable的列名对应起来(date.DataPropertyName = "date"),这是数据能正确显示的基础,没问题。
完整实现步骤&代码示例
我把你的代码补全并标注重点:
// 初始化DataTable DataTable dt = new DataTable(); dataGridViewFood.AutoGenerateColumns = false; // 给DataTable添加列,注意列名要和后续DataGridView列的DataPropertyName对应 dt.Columns.Add("date", typeof(string)); dt.Columns.Add("food", typeof(int)); // 配置日期列(DataGridViewTextBoxColumn) DataGridViewTextBoxColumn dateColumn = new DataGridViewTextBoxColumn(); dateColumn.HeaderText = "日期"; // 表头显示的文字 dateColumn.DataPropertyName = "date"; // 绑定到DataTable的"date"列 dataGridViewFood.Columns.Add(dateColumn); // 配置下拉选列(你的原有代码,这里补全) DataGridViewComboBoxColumn foodColumn = new DataGridViewComboBoxColumn(); var foodList = new List<string>() { "早餐", "午餐", "晚餐" }; foodColumn.DataSource = foodList; foodColumn.HeaderText = "餐食类型"; // 注意:你的food列是int类型,这里DataPropertyName绑定后,会对应下拉列表的索引值 foodColumn.DataPropertyName = "food"; dataGridViewFood.Columns.Add(foodColumn); // -------------------------- // 重点:给DataGridViewTextBoxColumn设置值的核心操作 // 往DataTable里添加行数据,对应列的值会自动显示在DataGridView中 dt.Rows.Add("2024-05-20", 0); // 第一行日期为2024-05-20,餐食对应下拉列表第1项 dt.Rows.Add("2024-05-21", 1); // 第二行日期为2024-05-21,餐食对应下拉列表第2项 // 动态修改某一行的日期值(比如修改第一行) dt.Rows[0]["date"] = "2024-05-22"; // 最后把DataTable绑定到DataGridView dataGridViewFood.DataSource = dt;
注意事项
- 不要直接修改DataGridView的单元格值(比如
dataGridViewFood.Rows[0].Cells[0].Value = "xxx"),虽然能生效,但不符合数据绑定的最佳实践,维护起来麻烦。优先通过修改DataTable来同步界面。 - 确保
DataPropertyName和DataTable的列名完全一致(大小写敏感),否则数据无法映射。 - 如果你的DataTable是动态更新的,一般直接修改DataTable后界面会自动同步;如果遇到不刷新的情况,可以调用
dataGridViewFood.Refresh()强制更新。
内容的提问来源于stack exchange,提问作者Gregori
相关产品推荐
相关产品推荐

