在我们处理数据绑定控件的时候很多时候需要用到主键,也就是Id,比如删除,修改等操作,只有知道了主键Id才可以知道对那一条记录操作,下面就来看看,在不同的环境中如何获得主键
1、 当我们触发RowCommand,ItemCommand事件的时候,经常执行的是删除,修改等操作,这个当然是需要主键Id了,在前台可以通过CommandArgument去绑定id,然后再RowCommand,ItemCommand获得id即可:
<asp:TemplateField HeaderText="删除" ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="false" CommandArgument='<%#eval_r("Id") %>'
CommandName="DelNew" Text="删除" OnClientClick="return confirm('确定要删除吗?')"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
后台:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "DelNew")
{
int id = Convert.ToInt32(e.CommandArgument);
NewsManager.Del(id);
DateBindNews();
}
if (e.CommandName == "EditNew")
{
int id = Convert.ToInt32(e.CommandArgument);
Response.Redirect("EditNews.aspx?NewId="+id);
}
}
一般在触发数据源控件的事件中会用到e这个参数获得相关值,e就代表着点击,选择的意思,比如RowCommand和DataBound事件等,可以通过它获得选择的行,或者是选择行里的元素
2、 如果你把主键Id绑定到了Web控件中,比如HiddenField,那么这个时候我们就可以使用FindControl(“web控件Id”)来获得Id了:
当我们循环数据绑定控件的项时,可以这样写:
CheckBox chk = this.GridView1.Rows[i].FindControl("chk") as CheckBox;
当我们触发DataBound事件时,可以这样写:
CheckBox chk = e.Row.FindControl("chk") as CheckBox;
当我们触发DataList或者是Repeater的ItemCommand事件时,可以这样写:
HiddenField txtClassId = (HiddenField)e.Item.FindControl("txtClassId");
3、 我们也可以把主键Id绑定到DataKeys中,这个只能在GirlView与DataList中使用,然后再后台中直接读取就可以了‘
int id =Convert.ToInt32(this.GridView1.DataKeys[i].Value);
int id =Convert.ToInt32(this.GridView1.DataKeys[e.RowIndex].Value);
4、 如果Id也没绑定了,我们也可以采用:
this.GridView2.Rows[e.RowIndex].Cells[2].Text
5、 在DataBound事件中,我们有可以通过下面的方法获得主键Id
如果数据绑定控件采用的是DataSet绑定的话,我们可以直接转换获得即:
DataRowView drw=(DataRowView)e.Item.DataItem;
如果数据绑定控件采用的是泛型集合绑定的话,我们可以直接转换获得即:
Model.User drw=( Model.User)e.Item.DataItem;
然后可以直接获得ID
Int Id=convert.ToInt32(drw.id)
int Id = Convert.ToInt32(drw["id "]);
6、 如果我们是在外部使用内部的选择项的Id,出了循环数据控件,比如
点击编辑的时候将网站名称和网址传到上面的文本框中,根据主键ID修改即可,那么这个ID该如何获得,那么只从在点击编辑的时候,将主键ID赋给两另外一个控件即可,然后再保存的时候读取该控件的值就可以了,也就是主键ID,这样就可以修改了
7、 获得ID也可以通过超链接传值
8、 可以把id绑定到隐藏域中<% eval_r("Id")%>
获得主键ID的方法很多,灵活使用就可以了