.NET数据绑定控件使用记录(GridView,DataList,Reapter...)
一、GridView 控件
1、为当前源数据的行添加序号,使用<%# Container.DataItemIndex %>
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField HeaderText="序号">
<ItemTemplate>
<%# Container.DataItemIndex %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
2、RowCommand事件
//获取当前行
GridViewRow gvr = (GridViewRow)((Control)e.CommandSource).Parent.Parent;
//获取当前行中的某一列中的TextBox控件
TextBox txtJobsName = (TextBox)gvr.Cells[2].FindControl("txtJobsName");
第二种方法:页面没有绑定CommandArgument
int index=Convert.ToInt32(e.CommandArgument);
GridViewRow row =GridView1.Rows[index];
----------------------------------------------------------------------------------------------------------------------
第一种方式,取得点击的行号,主键值,某行中指定列的值,如下:
protected void gvProduct_RowCommand(object sender, GridViewCommandEventArgs e)
{
//获取当前点击前的行号,说明:ImageButton因为我 放的按钮为ImageButton,用户可以根据放置的控件不同而不同。
int index = ((GridViewRow)((ImageButton)(e.CommandSource)).Parent.Parent).RowIndex;
//获取当前选点击行的主键值
string key = this.gvProduct.DataKeys[index].Value.ToString();
//获取当前点击行,某列的值
string id = this.gvProduct.Rows[index].Cells[1].Text;
/*
补充一下,因为我在上面的前台代码中放了CommandArgument='<%# Eval("ProductID") %>',ProductID为数据库中的主键,所以得到主键值也可以如下:string strProductId = e.CommandArgument.ToString(); */
// 有了上面的操作,以下操作就方便了
if (e.CommandName == "manage")
{
//.......
}
}
第二种方式:
//在前台代码中,不要 CommandArgument='<%# Eval("ProductID") %>' 这个代码,即去掉这个,然后,下面操作:
protected void gvProduct_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "manage")
{
int index = Convert.ToInt32(e.CommandArgument);
string key = this.gvProduct.DataKeys[index].value.toString();
Response.Write(key);
}
}
3、RowDataBound事件
//行数据绑定
protected void gvProduct_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
ImageButton imgBtn = new ImageButton ();
imgBtn = (ImageButton )e.Row.Cells[6].FindControl("imgBtnManage");//自己清楚,此ImageButton模板列,你放在GridView中的第几列。
imgBtn .CommandArgument = e.Row.RowIndex.ToString();
}
}
二、DataList控件
对于DataList,这么的写法
protected void DL_student_ItemDataBound(object sender, DataListItemEventArgs e)
{
//if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.Alternatingitem)
if (e.Item.ItemType != ListItemType.Header && e.Item.ItemType != ListItemType.Footer)
{
Image img = (Image)e.Item.FindControl("Image1");
}
}
三、Reapter控件
对于Repeater 控件。
protected void RP_ErrorClock_ItemDataBound(object sender, DataListItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.Alternatingitem){
Image img = (Image)e.Item.FindControl("Image1");
}
}
1.如果绑定的数据源是DataTable,可以通过DataRowView dv = e.Item.DataItem as DataRowView; 获取到行数据
2.如果绑定的数据源是List数据模型(如: List< WfProcessInfoMOD >),可以通过WfProcessInfoMOD model = e.Item.DataItem as WfProcessInfoMOD;获取行数据模型
3.绑定当前源数据的行序号,与GridView类似, <%# Container.ItemIndex %>,一般是用Container先找数据集,再获取其属性
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr><td> <%# Container.ItemIndex %></td>
<td> <%# Eval("name") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
浙公网安备 33010602011771号