获取数据源绑定控件主键

在我们处理数据绑定控件的时候很多时候需要用到主键,也就是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的方法很多,灵活使用就可以了

 

posted @ 2011-03-04 10:16  双魂人生  阅读(608)  评论(0编辑  收藏  举报