2012-02-09 18 views
0

グリッドビューは、列を自動生成しません。 GridViewには、Checkbox(DataTableから選択した行を削除する)、 (現在の行を編集するため)の1つ、DataTableからデータを表示するための3つの列があります。グリッドビューの選択行のデータベースID

私はそれをDataTableからバインドしています。 私はDataTableに主キーを持っています。 私の問題は、編集リンクボタンをクリックしているときです。 グリッドビューで選択した行のデータテーブルからプライマリキー(ID)を取得していません。(編集リンクボタンをクリックすると、 GridViewでバインドされたデータがフィルタリングされるため、データテーブルの主キーと一致する行インデックスは使用できません。

私が試みたのは、DataTableの主キー列である非表示のグリッドビューでもう1列を作成したことです。しかし、あまりにも私は編集のためにクリックされた行の隠れた列にデータを取得していません。

誰かが新しいアイデアや、私が試しているものの解決策をお手伝いしてください。

答えて

0

更新のために、選択したIDをgv_RowCommandイベントで取得できます。選択のために[複数選択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() + ","; 
      } 
     } 
関連する問題