发布网友 发布时间:2022-04-21 23:15
共1个回答
热心网友 时间:2023-12-09 04:15
数据绑定 (data binding) 数据源与服务器控件的关联。 从一个Windows窗体的角度来看,“数据绑定”是一种把数据绑定到一种用户界面元素(控件)的通用机制。在Windows窗体中有两种数据绑定类型:简单绑定和复杂绑定。 简单绑定 简单绑定是将一个用户界面元素(控件)的属性绑定到一个类型(对象)实例上的某个属性的方法。例如,如果一个开发者有一个Customer类型的实例,那么他就可以把Customer的“Name”属性绑定到一个TextBox的“Text”属性上。“绑定”了这2个属性之后,对TextBox的Text属性的更改将“传播”到Customer的Name属性,而对Customer的Name属性的更改同样会“传播”到TextBox的Text属性。Windows窗体的简单数据绑定支持绑定到任何public或者internal级别的.NET Framework属性。 复杂数据绑定 复杂数据绑定是把一个基于列表的用户界面元素(比如ComboBox、Grid)绑定到一个数据实例列表(比如DataTable)的方法。和简单数据绑定一样,复杂数据绑定通常也是用户界面元素发生改变时传播到数据列表,数据列表发生改变时传播到用户界面元素。Windows窗体复杂数据绑定支持绑定到那些支持IList接口(或者是IEnumerable接口,如果使用的是BindingSource组件的话)的数据列表。
各种数据绑定控件间的区别
各种数据绑定控件间的区别 控件 主要数据结构 功能 描述和主要用途
GridView 表 读取与编辑 每个字段一列
每个字段值对应于自已的一个单元格
在网络中显示多条记录
编辑现有记录
DataList 表或树 读取和编辑 所有字段在一个单元格中
一个单元格等于一条记录
在网格中显示多条记录
在GridView创建新记录
Repeater 表或树 只读 所有字段在一个单元格中
一个单元格等于一条记录
在网格中显示多条记录.为GridView创建新记录
DetailView 表或树 读取与编辑、创建 显示单个记录
提供默认结构
编辑现有记录
创建新记录
FormView 表或树 读取与编辑、创建 显示单个记录
没有默认结构
编辑现有记录
创建新记录
DropDownList和ListBox 表或树 只读 列出字段
让用户选择
显示供用户选择的数据
SiteMapPath 树 只读 列出主页和当前页面之间的页面名称
用于确定当前所处的站点位置
Menu 树 只读 显示根节点,能够选择一次展开一个子节点
用于显示选择的菜单
TreeView 树 只读 显示根节点,能够选择一次展开一个子节点
用于同时显示多个子节点
数据绑定控件比较(Reapter\DataList\GridView\DatailsView\FormView):
1.插入功能方面:
DetailsView和FormView具有插入功能,其它控件没有
2.模板
DataList\FormView\Repeater三种必须编辑模板,而
GridView和DetailsView只有在将列转换成模板列以后才会出现各种模板.
3.自动分页功能
GridView ,DetailsView和FormView都是2.0版本新增控件,内置了分页,排序等等功能,
其他需要手工定义
4.数据呈现方式:
GridView,DataList,Repeator用于呈现多列数据,
DetailsView,FormView用于呈现单列数据,即常用的数据明细.
DataList和Reapter都需要编辑模板列,而在模板列当中可以添加TextBox,同时可以指定TextBox的ID从而实现提取用户输入的值,但是DataGrid和GridView两个件是不需要编辑模板的,它的编辑功能是自动生成的我们无法知道那些文本框的ID,也就无法通过ID来获取用户的输入,那么可以通过对单元格的引用来实现:
private void DataGrid1_UpdateCommand(object source,xx)
{
string bkid=DataGrid1.DataKeys[e.Item.ItemIndex].toString();//提取主键
string bktitle=((TextBox)e.Item.Cells[1].Controls[0]).Text;//提取用户的输入
}
一.进入编辑状态:
DataList1.EditItemIndex = e.Item.ItemIndex;
DataGrid1.EditItemIndex = e.Item.ItemIndex;
GridView1.EditIndex = e.NewEditIndex;
DetailsView1.ChangeMode(DetailsViewMode.Edit);//进入编辑状态
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);//退出编辑状态
二.设置主键:
DataList1.DataKeyField = "bkid";
DataGrid1.DataKeyField = "bkid";
string[] str={"bkid"};
GridView1.DataKeyNames = str;
三.提取主键:
string bkid = DataList1.DataKeys[e.Item.ItemIndex].ToString();//DataList
string bkid = DataGrid1.DataKeys[e.Item.ItemIndex].ToString();//DataGrid
string bkid = GridView1.DataKeys[e.RowIndex].Value.ToString();//GridView
string bkid = DetailsView1.DataKey[0].ToString();
四.查找控件:
string bktitle = ((TextBox)e.Item.FindControl("txtTile")).Text;//DataList
string bktitle = ((TextBox)e.Item.Cells[1].Controls[0]).Text;//DataGrid
string bktitle = ((TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
string bktitle = ((TextBox)DetailsView1.Rows[1].Cells[1].Controls[0]).Text;
注意查找控件有两种方法:(各数据绑定控件的都可以用下面两种方法进行查找)
1.如果知道控件的ID可以用这种方法
((TextBox)e.Item.FindControl("txtTile")).Text;//这是查找
2.如果不知道控件的ID可用这种方法
((TextBox)e.Item.Cells[1].Controls[0]).Text;//这是索引
五.给删除按钮添加确认:
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
LinkButton lbtn =(LinkButton) e.Item.FindControl("lbtndelete");
lbtn.Attributes.Add("OnClick","return confirm(‘确定要删除吗?‘)");
}
}
protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
{
LinkButton lbtn = (LinkButton)e.Item.Cells[3].Controls[0];
lbtn.Attributes.Add("OnClick","return confirm(‘确认删除?‘)");
}
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType== DataControlRowType.DataRow)
{
string strid = e.Row.Cells[0].Text;//获取第一行的字段值;
e.Row.Cells[3].Attributes.Add("OnClick", "return confirm(‘确认删除\""+strid+"\"?‘)");
//用了两个转义符将第一列的值用引号括起来,注意转义符后面一个将不被解释,是直接放上去;
这样可以么?