日期:2014-05-17  浏览次数:20833 次

【疑问】关于绑定到DataGridView的DataTable的问题
利用C#在做应用时偶然间发现的关于DataGridView的问题。下面是一个Demo。
窗口界面如图:

后台代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        SqlDataAdapter sqlDA;
        DataTable dt;
        public Form1()
        {
            InitializeComponent();
        }

        private void btnModify_Click(object sender, EventArgs e)
        {
            dgv.CurrentCell.Value = "123";
            DataRowView drv = (DataRowView)dgv.CurrentRow.DataBoundItem;
            MessageBox.Show(drv.Row.RowState.ToString());
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string strConn = "Data Source=192.168.1.110;Initial Catalog=GD-Pipe;Persist Security Info=True;User ID=sa;Password=123";
            sqlDA = new SqlDataAdapter("SELECT * FROM ModelType", new SqlConnection(strConn));
            SqlCommandBuilder sqlCB = new SqlCommandBuilder(sqlDA);
            dt = new DataTable();
            sqlDA.Fill(dt);

            dgv.DataSource = dt;
        }
    }
}

点击“修改”按钮后,DataGridView和绑定在上面的DataTable中的所对应的值都改变了,可是DataTable中的RowState依然是Unchanged,这是怎么回事呢?
环境:VS2010,SQL2008
DataGridView

------解决方案--------------------
可能与这句有关SqlCommandBuilder sqlCB = new SqlCommandBuilder(sqlDA);

我这里测试了显示的是Modify

我是new一个DataTable,添加列和行,然后执行dt.AcceptChanges()。单击按钮后修改的代码跟你完全一样,弹出的是Modify。
------解决方案--------------------
datagridview貌似要回车移动到下一行才算提交这一行吧。提交之后才会改变状态,
你这还是属于还在编辑中吧。