dataGridView中值赋值给DataTable

DataTable dtsve = new DataTable();


private void toolStripButton6_Click(object sender, EventArgs e) //保存
{
    if (dataGridView1.Rows.Count > 0)
    {
        string str_sql = "SELECT * FROM MaterialDemand a WHERE 1=2";  //只获取表结构,但无表内容
        dtsve = SQL.command(str_sql).Tables[0];
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {
            DataRow drow = dtsve.NewRow();
            drow["MaterialCode"] = dataGridView1.Rows[i].Cells[0].Value.ToString().Trim();
            drow["CreateDate"] = DateTime.Now.ToString("yyyy-MM-dd").Trim();
            dtsve.Rows.Add(drow);

        }

        DataRow drow = dtsve.NewRow();
        dtsve.Rows.Add(drow);
        dtsve.Columns["Applicant_name"].Expression = "'" + textBox1.Text.Trim() + "'";
        dtsve.Columns["DepartmentCode"].Expression = "'" + textBox2.Text.Trim() + "'";
    }
}
### C# 中修改 DataGridView 的值并更新绑定的 DataTable 当 `DataGridView` 绑定到 `DataTable` 后,任何对 `DataGridView` 单元格的更改都会自动反映在对应的 `DataTable` 上[^1]。为了确保这种同步机制正常工作,需要注意以下几点: #### 创建和初始化 DataTableDataGridView ```csharp private void Form1_Load(object sender, EventArgs e) { // 初始化 DataTable 并定义列结构 DataTable dt = new DataTable(); // 添加一列为 "weibo" DataColumn dc1 = new DataColumn("weibo", typeof(System.String)); dt.Columns.Add(dc1); // 将 DataTable 设置为 DataGridView数据源 dataGridView1.DataSource = dt; } ``` #### 修改 DataGridView 单元格后的处理逻辑 默认情况下,在设置了 `DataSource` 属性之后,所有的编辑操作会直接作用于底层的数据表对象上。因此需要额外编写代码来手动触发更新。 但是有时可能希望监听特定事件以便执行自定义行为或验证输入有效性。可以订阅 `CellValueChanged` 或者其他相关联的事件来进行更细粒度控制: ```csharp // 订阅 CellValueChanged 事件用于检测单元格变化 dataGridView1.CellValueChanged += (s, ev) => { var rowIndex = ev.RowIndex; var colIndex = ev.ColumnIndex; if(colIndex >= 0 && rowIndex >= 0){ string newValue = dataGridView1.Rows[rowIndex].Cells[colIndex].Value?.ToString() ?? ""; Console.WriteLine($"Cell at ({rowIndex},{colIndex}) changed to '{newValue}'"); } }; ``` #### 注意事项 - **线程安全**: 如果应用程序涉及多线程编程,则需注意访问 UI 控件时应始终处于主线程上下文中。 - **性能考虑**: 对大型数据集频繁刷新可能导致界面响应缓慢;此时可考虑批量提交变更或是采用虚拟模式优化显示效率。 - **错误处理**: 用户可能会输入符合预期格式的内容,建议实现适当的数据校验防止异常发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值