2012-02-09 117 views
0

我有GridView,它不是自动生成列。在GridView中有3列:一列用于复选框(从DataTable中删除所选行), 一列用于编辑链接按钮(用于编辑当前行), ,第三列用于显示来自DataTable的数据。如何获取网格视图选定行的数据库ID

我从DataTable中绑定它。 我在DataTable中有一个主键。 现在我的问题是,当我点击编辑链接按钮我没有从 datatable网格视图中选定的行获得主键(编号)(我认为当我点击编辑链接按钮时没有选择行)。由于GridView中的数据绑定已过滤,因此无法将行索引与数据表主键匹配。

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

有人请提供一个新的想法,或解决方案为我正在尝试.. thanx提前。

回答

0

请按照以下步骤尝试更新,所选ID可以在gv_RowCommand事件中获得。对于delection [多个选择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> 

--------------- code behind ------------ ---------------

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() + ","; 
      } 
     } 
相关问题