如何获取网格视图选中行的DataBase id

时间:2012-02-09 06:21:02

标签: asp.net

我有GridView,它不会自动生成列。在GridView中有3列:一列用于Checkbox(从DataTable中删除选定的行), 一个用于编辑链接按钮(用于编辑当前行), 第三个是显示来自DataTable的数据。

我从DataTable绑定它。 我在DataTable中有一个主键。 现在我的问题是,当我点击编辑链接按钮时,我没有得到主键(id) 网格视图中所选行的数据表(我想在单击编辑链接按钮时未选中行)。我不能将行索引与数据表主键匹配,因为GridView中绑定的数据已被过滤。

我试过的是,我在网格视图中再创建了一个隐藏的列,它是DataTable的主键列。但对于这一点,我也没有在点击要编辑的行的隐藏列中获取数据。

有人请帮助我提出一个新的想法,或者解决我正在尝试的事情。提前做好。

1 个答案:

答案 0 :(得分:0)

请试试如下..对于更新,可以在gv_RowCommand事件中获取所选ID。对于delection [multiple select checbox],请检入btnDelete_Click,enter code here

-------------- aspx代码------------------------------- -

<asp:Button ID="btnDelete" runat="server" Text="Delete" 
        onclick="btnDelete_Click" />
    <asp:GridView ID="gv" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="ID" onrowcommand="gv_RowCommand" 
        onrowupdating="gv_RowUpdating">
        <Columns>
            <asp:TemplateField HeaderText="Delete">
                <ItemTemplate>
                    <asp:CheckBox ID="chkSel" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Update">
                <ItemTemplate>
                    <asp:LinkButton runat="server" CommandArgument='<%# Eval("ID") %>' CommandName="Update" text="Update" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="NAME" HeaderText="Name" />
        </Columns>
    </asp:GridView>

---------------代码背后---------------------------

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                BindData();
        }

        private void BindData()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID");
            dt.Columns.Add("NAME");

            DataRow dr = dt.NewRow();
            dr[0] = "1";
            dr[1] = "James";
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr[0] = "2";
            dr[1] = "Paul";
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr[0] = "3";
            dr[1] = "Mary";
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr[0] = "4";
            dr[1] = "Susan";
            dt.Rows.Add(dr);

            gv.DataSource = dt;
            gv.DataBind();
        }

        protected void gv_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Update")
            {
                string id = e.CommandArgument.ToString();
            }
        }

        protected void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {

        }

        protected void btnDelete_Click(object sender, EventArgs e)
        {
            string idList = "";

            for (int i = 0; i < gv.Rows.Count; i++)
            {
                CheckBox chk = (CheckBox)gv.Rows[i].FindControl("chkSel");

                if (chk != null && chk.Checked)
                    idList += gv.DataKeys[i].Value.ToString() + ",";
            }
        }