[转] C# TextBox、DataGrideView中的数据绑定

简介:

Xavierr 原文 C#数据绑定——简单的文本框绑定DataGridView

 

一、TextBox的数据绑定

经常写用一个TextBox显示某个对象,然后编辑之后再保存的程序。以前都是在TextBox_TextChanged事件中修改对象的值,或者保存的时候再读取TextBox.Text属性保存对象的值。这样比较麻烦,而且经常容易出错。后来了解了C#的数据绑定,发现能够很好的解决这个问题。

1. 首先C#的TextBox本身就带数据绑定功能。

下面的代码就是把_myData对象的"TheValue"属性绑定到textBox1和textBox2的"Text"属性。最后一个参数不同:

1)其中DataSourceUpdateMode.OnPropertyChanged表示textBox1.Text发生变化,_myData.TheValue也变化,叫双向绑定。

2)DataSourceUpdateMode.Never表示Text1.Text变化不影响_myData.TheValue的值,是单向绑定。

1
2
3
4
5
6
private  void  Form1_Load( object  sender, EventArgs e)
{
     _myData =  new  MyData();
     textBox1.DataBindings.Add( "Text" , _myData,  "TheValue" false , DataSourceUpdateMode.OnPropertyChanged);
     textBox2.DataBindings.Add( "Text" , _myData,  "TheValue" false , DataSourceUpdateMode.Never);
}

 

2.也许有人留意到了,为什么上面的叫"双向绑定"呢?如果_myData.TheValue的值变化了,两个文本框的Text会变化吗?不错,仅在 textBox上数据绑定还不叫双向绑定,对象数据变化要通知绑定该对象的控件才行。这样就需要对象实现INotifyPropertyChanged接 口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public  class  MyData : INotifyPropertyChanged
{
     private  string  _theValue =  string .Empty;
 
     public  string  TheValue
     {
         get  return  _theValue; }
         set
         {
             if  ( string .IsNullOrEmpty(value) && value == _theValue)
                 return ;
 
             _theValue = value;
             NotifyPropertyChanged(() => TheValue);
         }
     }
 
     public  event  PropertyChangedEventHandler PropertyChanged;
 
     public  void  NotifyPropertyChanged<T>(Expression<Func<T>> property)
     {
         if  (PropertyChanged ==  null )
             return ;
 
         var  memberExpression = property.Body  as  MemberExpression;
         if  (memberExpression ==  null )
             return ;
 
         PropertyChanged.Invoke( this new  PropertyChangedEventArgs(memberExpression.Member.Name));
     }
}

 

3.好了,数据绑定完成了,看看效果吧。textBox1.Text变化—>_myData.TheValue变化—>textBox2.Text变化。反过来textBox2.Text变化就不是这样了,因为textBox2使用的单向绑定。

 

二、DataGridView的数据绑定

没什么可说的,DataGridView可以绑定DataSet,也可以绑定DataTable。直接设置DataSource属性。

1
2
3
DataSet dataSet =  new  DataSet();
dataGridView1.DataSource = dataSet;
dataGridView1.DataSource = dataSet.Tables[0];

 设置DataGridView的Column属性就可以决定哪一列显示的数据。

1
Column1.DataPropertyName =  "ID"

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。




    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5814894.html ,如需转载请自行联系原作者


相关文章
|
2月前
|
C#
C# textbox接受tab作为值输入
C# textbox接受tab作为值输入
19 0
|
C# Windows
艾伟_转载:C# WinForm开发系列 - TextBox
包含金额/日期输入框,带弹出数字面板的计算输入框,安全密码输入等控件(文章及相关代码搜集自网络,仅供参考学习,版权属于原作者! ).   1.CalculatorBox    CalculatorBox.
1357 0
|
C#
【C#/WPF】TextBlock/TextBox/Label编辑文字的问题
原文:【C#/WPF】TextBlock/TextBox/Label编辑文字的问题 标题有点描述不清,就当是为了方便自己用时易于搜索到。
1345 0
|
C# 数据安全/隐私保护
C# Textbox的ImeMode取值对中文输入法的影响(进入才能看清)
原文:C# Textbox的ImeMode取值对中文输入法的影响(进入才能看清) C# Textbox的ImeMode取值对中文输入法的影响             取值 五笔加加 微软拼音3.
2290 0
|
C#
C# TextBox 焦点
TextBox焦点问题 1.失焦 KeyBoard.ClearFocus(); 存在一个问题,失去焦点之后,中文通过输入法依旧是可以输入的。 如果是中文文本框,按Enter失焦,同时禁止输入中文,可以调用 InputMethod.SetIsInputMethodEnabled(textBox,false); 在重新GetFocus之后,InputMethod.SetIsInputMethodEnabled(textBox,true)就行。
1176 0
|
C#
C#: 向Word插入排版精良的Text Box
Text Box(文本框)是Word排版的工具之一。在Word文档正文的任何地方插入文本框,可添加补充信息,放在合适的位置,也不会影响正文的连续性。我们可以设置文本框的大小,线型,内部边距,背景填充等效果。
835 0
c#TextBox输入框自动提示、自动完成、自动补全功能
功能概览 相关属性 TextBox.AutoCompleteCustomSource 属性 获取或设置当 TextBox.AutoCompleteSource 属性设置为 [CustomSource] 时要使用的自定义 T:System.Collections.Specialized.StringCollection。
1667 0
c# winforms TextBox的记忆功能
c# winforms TextBox的记忆功能   1:在项目上点右键  sproperties-settings 添加项目 如 MyText  类型 String 2: 获取值:   string loginId = Properties.
C# Label Textbox改变高度大小
一. VS2010中的Label     默认情况下拖出的label只有一个点有方框,说明其是不可以拖动改变大小.     如果要实现如何处理?造成这个的原因是它的autosize被设置成了true,所以将其改为false就OK.
981 0