WinForm:数据源DataTable保持与DataGridView 界面数据的修改实时同步

时间:2021-10-09 14:43:16
在WinForm应用程序中,采用DataTable向 DataGridView 中绑定数据。
这个 DataGridView 中不光是数据呈现,还有TextBox、ComboBox等,当向 TextBox里输入值、ComboBox选项发生改变,希望把这些值同步更新到原DataTable。
比如第一行第二列是姓名字段,页面加载时DataTable中是空字符串(即无姓名),DataGridView 上以TextBox形式呈现,当用户输入“张三”后,则把这个姓名信息同步到 DataTable中,使得在不关闭窗体前提下,再一次绑定DataTable到DataGridView 后,原来输入的姓名“张三”能出现。
求相关实现的参考。

9 个解决方案

#1


解决方案:

1. 表格的数据源来自视图或者Join两张表,假设有a.CustomerCode,b.CustomerName字段,取到数据后能准确显示名称如“张三”

2. 当在GridView中新增记录,在CustomerCode栏输入C01编号,假设带出CustomerName为“李四”,然后更新当前记录的CustomerName字段,在缓存的的数据中也能显示

3. 保存数据后,重新查询,进入步驟1

#2


如果用到第三方控件,太简单了。

参考这两篇文章吧,小菜鸟:

开发应用-RepositoryItemlookupEdit显示名称 
http://www.csframework.com/archive/1/arc-1-20110327-1242.htm

表格内显示多表关联数据解决方案(Join,View,lookup) 
http://www.csframework.com/archive/1/arc-1-20110613-1594.htm

#3


该回复于2011-07-07 13:10:33被版主删除

#4


引用 1 楼 jonnysun 的回复:
解决方案:

1. 表格的数据源来自视图或者Join两张表,假设有a.CustomerCode,b.CustomerName字段,取到数据后能准确显示名称如“张三”

2. 当在GridView中新增记录,在CustomerCode栏输入C01编号,假设带出CustomerName为“李四”,然后更新当前记录的CustomerName字段,在缓存的的数据中也能显示

3. 保存数据后,……


您好,我描述的所有操作,皆不向数据库存储。 当向DataGridView 内的TextBox输入一个“张”字时,立刻将这个信息同步到原 DataTable。

#5


在 rowchange 事件里面做更新 

如果  row发生

   private void UpdateGridInfo(GridViewRowInfo currentRow)        {            if (currentRow == null)            {                return;            }            this.radGridView1.CloseEditor();            currentRow.Cells["ProductName"].Value = this.radTextBoxProductName.Text;            currentRow.Cells["Manufacturer"].Value = this.radTextBoxManufacturer.Text;            currentRow.Cells["Lining"].Value = this.radTextBoxMaterial.Text;            currentRow.Cells["Dimensions"].Value = this.radTextBoxDimension.Text;            if (this.radComboBox1.SelectedIndex != -1)            {                currentRow.Cells["SalesRepresentative"].Value = ((RadComboBoxItem)this.radComboBox1.SelectedItem).Text;            }            GridViewNewRowInfo newRowInfo = currentRow as GridViewNewRowInfo;            if (newRowInfo != null)            {                currentRow.InvalidateRow();            }            else            {                ((IEditableObject)this.radGridView1.CurrentRow.DataBoundItem).EndEdit();            }        }

#6



        private void UpdateGridInfo(GridViewRowInfo currentRow) 
        { 
            if (currentRow == null) 
            { return; } 
            this.radGridView1.CloseEditor(); 
            currentRow.Cells["ProductName"].Value = this.radTextBoxProductName.Text; 
            currentRow.Cells["Manufacturer"].Value = this.radTextBoxManufacturer.Text; 
            urrentRow.Cells["Lining"].Value = this.radTextBoxMaterial.Text; 
            currentRow.Cells["Dimensions"].Value = this.radTextBoxDimension.Text; 
            if (this.radComboBox1.SelectedIndex != -1) 
            { 
                currentRow.Cells["SalesRepresentative"].Value = ((RadComboBoxItem)this.radComboBox1.SelectedItem).Text; 
            } 
            GridViewNewRowInfo newRowInfo = currentRow as GridViewNewRowInfo; 
            if (newRowInfo != null) 
            { currentRow.InvalidateRow(); } 
            else { 
                ((IEditableObject)this.radGridView1.CurrentRow.DataBoundItem).EndEdit();
            } 
        }

#7


这是  telerik 里面的radgridview 实例一部分 

#8


帮顶! 求分。 WinForm:数据源DataTable保持与DataGridView 界面数据的修改实时同步

#9


用BindingSource实现双向绑定就行了。

比如:txtName.DataBindings.Add("Text", 数据源, "列名");  

http://blog.csdn.net/fangxinggood/article/details/6329840

#1


解决方案:

1. 表格的数据源来自视图或者Join两张表,假设有a.CustomerCode,b.CustomerName字段,取到数据后能准确显示名称如“张三”

2. 当在GridView中新增记录,在CustomerCode栏输入C01编号,假设带出CustomerName为“李四”,然后更新当前记录的CustomerName字段,在缓存的的数据中也能显示

3. 保存数据后,重新查询,进入步驟1

#2


如果用到第三方控件,太简单了。

参考这两篇文章吧,小菜鸟:

开发应用-RepositoryItemlookupEdit显示名称 
http://www.csframework.com/archive/1/arc-1-20110327-1242.htm

表格内显示多表关联数据解决方案(Join,View,lookup) 
http://www.csframework.com/archive/1/arc-1-20110613-1594.htm

#3


该回复于2011-07-07 13:10:33被版主删除

#4


引用 1 楼 jonnysun 的回复:
解决方案:

1. 表格的数据源来自视图或者Join两张表,假设有a.CustomerCode,b.CustomerName字段,取到数据后能准确显示名称如“张三”

2. 当在GridView中新增记录,在CustomerCode栏输入C01编号,假设带出CustomerName为“李四”,然后更新当前记录的CustomerName字段,在缓存的的数据中也能显示

3. 保存数据后,……


您好,我描述的所有操作,皆不向数据库存储。 当向DataGridView 内的TextBox输入一个“张”字时,立刻将这个信息同步到原 DataTable。

#5


在 rowchange 事件里面做更新 

如果  row发生

   private void UpdateGridInfo(GridViewRowInfo currentRow)        {            if (currentRow == null)            {                return;            }            this.radGridView1.CloseEditor();            currentRow.Cells["ProductName"].Value = this.radTextBoxProductName.Text;            currentRow.Cells["Manufacturer"].Value = this.radTextBoxManufacturer.Text;            currentRow.Cells["Lining"].Value = this.radTextBoxMaterial.Text;            currentRow.Cells["Dimensions"].Value = this.radTextBoxDimension.Text;            if (this.radComboBox1.SelectedIndex != -1)            {                currentRow.Cells["SalesRepresentative"].Value = ((RadComboBoxItem)this.radComboBox1.SelectedItem).Text;            }            GridViewNewRowInfo newRowInfo = currentRow as GridViewNewRowInfo;            if (newRowInfo != null)            {                currentRow.InvalidateRow();            }            else            {                ((IEditableObject)this.radGridView1.CurrentRow.DataBoundItem).EndEdit();            }        }

#6



        private void UpdateGridInfo(GridViewRowInfo currentRow) 
        { 
            if (currentRow == null) 
            { return; } 
            this.radGridView1.CloseEditor(); 
            currentRow.Cells["ProductName"].Value = this.radTextBoxProductName.Text; 
            currentRow.Cells["Manufacturer"].Value = this.radTextBoxManufacturer.Text; 
            urrentRow.Cells["Lining"].Value = this.radTextBoxMaterial.Text; 
            currentRow.Cells["Dimensions"].Value = this.radTextBoxDimension.Text; 
            if (this.radComboBox1.SelectedIndex != -1) 
            { 
                currentRow.Cells["SalesRepresentative"].Value = ((RadComboBoxItem)this.radComboBox1.SelectedItem).Text; 
            } 
            GridViewNewRowInfo newRowInfo = currentRow as GridViewNewRowInfo; 
            if (newRowInfo != null) 
            { currentRow.InvalidateRow(); } 
            else { 
                ((IEditableObject)this.radGridView1.CurrentRow.DataBoundItem).EndEdit();
            } 
        }

#7


这是  telerik 里面的radgridview 实例一部分 

#8


帮顶! 求分。 WinForm:数据源DataTable保持与DataGridView 界面数据的修改实时同步

#9


用BindingSource实现双向绑定就行了。

比如:txtName.DataBindings.Add("Text", 数据源, "列名");  

http://blog.csdn.net/fangxinggood/article/details/6329840