类如何与界面绑定

准确的说应该是用户自定类的对象如何与界面元素绑带。在.Net中Dataset、DataTable等可以与Datagrid绑定,Dataset、DataTable中的数据就会自动的填充到Datagrid中,而当用户修改了Datagrid中的数据,这些数据会自动的更新Dataset、DataTable中的数据,这样的数据绑定功能令很多人羡慕不已。很多情况我们并不直接使用Dataset、DataTable等进行数据访问,我们往往是将业务封装在类中,通过类和界面交互。这种情况下数据通过界面传递给类的属性,在类中将这些数据保存到数据库中,三层体系结构中往往是这样的。为了和界面进行数据交互我们通过对象或者对象数组或者装满对象的ArrayList。如果是单行数据的交互通过对象来完成,如果是多行数据通过对象数组或者ArrayList来完成。ArrayList可以看作是动态数组,我本人比较希望使用ArrayList而不是对象数组。这样对象或者ArrayList中数据往界面上填充的时候,我们需要写代码将他们中的数据一个读出来填充到界面元素中。当需要进行保存、新建、修改等操作的时候我们又需要将界面上的数据赋值给对象或者ArrayList。很明显这样的处理方式与Dataset和Datagrid绑定的方式相比,复杂了很多。我们就在思考使用对象能够实现和界面元素的绑定呢?当然可以,很多人听到这个回答很兴奋。到底如何实现呢?

1、简单绑定
我们可以对象或者ArrayList和文本框、标签等等这些只能显示一行一列的界面元素进行绑定。为了演示的效果比较好,我们使用如下的一个User类。
None.gif      public   class  User
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
public User()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public User(int vAge,string vName)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            _Age
=vAge;
InBlock.gif            _Name
=vName;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
private int _Age;
InBlock.gif        
private string _Name;
InBlock.gif        
public int Age
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
setdot.gif{_Age=value;}
ExpandedSubBlockStart.gifContractedSubBlock.gif            
getdot.gif{return _Age;}
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public string Name
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
setdot.gif{_Name=value;}
ExpandedSubBlockStart.gifContractedSubBlock.gif            
getdot.gif{return _Name;}
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
//查询所有的用户通过ArrayList返回
InBlock.gif
        public ArrayList GetAllUser()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
string strSQL="Select * from User";
InBlock.gif            
//CommonDAL是我们封装的执行执行SQL语句的类
InBlock.gif
            SqlDataReader dr=CommonDAL.ExecuteReader(strSQL);
InBlock.gif            ArrayList al
=new ArrayList();
InBlock.gif            
while(dr.Read())
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                al.Add(
new User(dr.GetInt32(0),dr.GetString(1)));
ExpandedSubBlockEnd.gif            }

InBlock.gif            
return al;
ExpandedSubBlockEnd.gif        }

下面的代码演示了我们将User类的对象user和文本框进行了绑定。我们可以在Form_Load中写这样的代码实现
None.gif              // 对象和控件绑定
None.gif
            User user = new  User( 10 , " Tom " );
None.gif            txtAge.DataBindings.Add(
" Text " ,user, " Age " );
None.gif            txtUser.DataBindings.Add(
" Text " ,user, " User " );
None.gif
None.gif            
// ArrayList和控件绑定
None.gif
            txtAge1.DataBindings.Add( " Text " ,user.GetAllUser(), " Age " );
None.gif
{Controls}.DataBindings.Add("{Property}",{dataSource},"{dataMember}");
其中Property为控件的属性,数据源,数据源中的某个属性

当使用ArrayList和文本框绑定时仅仅将ArrayList的第一个值取出和控件绑定(如果这个ArrayList同时也绑定了一个ListBox,当选中不同的User时,文本框中的内容会自动发生相应的变化)。这样修改了控件的值对象中的属性就会自动修改。

2、复杂绑定
象ListBox、ComoBox等这一类可以显示一列多行的控件,可以绑定对象数组或者ArrayList,不能绑定单个对象。我们可以使用如下的方式将ListBox和ArrayList绑定,对象数组类似。
None.gif             lstName.DataSource = user.GetAllUser();
None.gif            lstName.DisplayMember
= " Age " ;
None.gif            lstName.ValueMember
= " Age " ;
None.gif
DataSource=支持实现了IList的对象(即数据源)
DisplayMember:要显示的数据源中的一个属性
ValueMember:确定在数据源中用哪一个属性,与DisplayMember对应。
通常我们使用DisplayMember来加载要显示的属性,使用ValueMember来隐含加载主键。

3 、Datagrid
Datagrid的特定就是可以加载多行多列。将对象数组或者ArrayList加载到Datagrid中的方式和Dataset类似。
    dataGrid1.DataSource=user.GetAllUser();
这样ArrayList中的所有数据将全部加载到DataGrid中。

总结:通过以上说明我们便发现原来在.Net中类也是可以完全和界面元素进行绑定,这样我们就没有必要一味的追求使用Dataset了,当然Dataset有很多它的优势,该使用的时候还是要使用。另外根据MSDN的意思Listview、TreeView也可以使用绑定,但是本人尝试了很久,也没有成功,如何有知道的请告诉我一下,谢谢。

转载于:https://www.cnblogs.com/hobe/archive/2005/10/09/250625.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值