2015-01-17 29 views
1

我正在創建綁定到網格視圖的動態數據表。每行填充按鈕。當我確定在該行上單擊哪個按鈕時,我想要在該行中單擊按鈕中獲取單元格的當前值並修改她。幫助!如何確定在動態創建的DataTable中單擊哪個按鈕

標記

<asp:GridView ID="GridView2" runat="server" 
    OnRowDataBound="GridView2_RowDataBound"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:Button ID="btnTest" runat="server" 
        CommandName="odzemi" 
        CssClass="button2" 
        Font-Bold="True" 
        Text="-" 
        Width="100px" 
        OnClick="btnTest_Click" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

//以這種方式創建行

  private void AddNewRecordRowToGrid() 
      {   
      int counter; 

      if (Request.Cookies["kasa"] == null) 

      counter = 0; 


     else 
     { 
      counter = int.Parse(Request.Cookies["kasa"].Value); 

     } 
     counter++; 

     Response.Cookies["kasa"].Value = counter.ToString(); 
     Response.Cookies["kasa"].Expires = DateTime.Now.AddYears(2); 

     if (ViewState["Markici"] != null) 
     { 
      DataTable dtCurrentTable = (DataTable)ViewState["Markici"]; 
      DataRow drCurrentRow = null; 

      if (dtCurrentTable.Rows.Count > 0) 
      { 

       for (int i = 1; i <= dtCurrentTable.Rows.Count; i++) 
       { 


        HttpCookie cookie = Request.Cookies["Democookie"]; 
        drCurrentRow = dtCurrentTable.NewRow(); 

        drCurrentRow["FirmaID"] = Request.Cookies["firma"].Value; 
        drCurrentRow["Godina"] = Request.Cookies["godina"].Value; 
        drCurrentRow["KasaID"] = Request.Cookies["kasa"].Value; 
        drCurrentRow["MarkicaID"] = Request.Cookies["kasa"].Value; 
        drCurrentRow["Datum"] = DateTime.Now; 
        drCurrentRow["Masa"] = Session["masa39"]; 
        drCurrentRow["VrabotenID"] = Session["New"]; 
        drCurrentRow["Artikal"] = Label3.Text; 
        drCurrentRow["Cena1"] = Label4.Text; 
        //this is where i need to make changes 
        drCurrentRow["Kolicina"] = Label5.text; 
        drCurrentRow["Smena"] = Session["smena1"]; 
        drCurrentRow["VkIznos"] = Label6.Text; 
        drCurrentRow["VkDanok"] = Label8.Text; 
        drCurrentRow["SySDatum"] = DateTime.Now; 
        drCurrentRow["Vid"] = Label23.Text; 
        drCurrentRow["Edmera"] = Label10.Text; 
        drCurrentRow["ArtikalID"] = Label33.Text; 
       } 


       //Removing initial blank row 
       if (dtCurrentTable.Rows[0][0].ToString() == "") 
       { 
        dtCurrentTable.Rows[0].Delete(); 
        dtCurrentTable.AcceptChanges(); 

       } 

       //Added New Record to the DataTable 
       dtCurrentTable.Rows.InsertAt(drCurrentRow,0); 
       //storing DataTable to ViewState 
       ViewState["Markici"] = dtCurrentTable; 

       //binding Gridview with New Row 
       GridView2.DataSource = dtCurrentTable; 
       GridView2.DataBind(); 


      } 
     } 
    } 

//這個按鈕i調用該方法

  protected void Button9_Click(object sender, EventArgs e) 
      {  
      AddNewRecordRowToGrid(); 

      } 

// ,在這裏我」 m確定點擊按鈕的行,並在這裏在這裏 dtCurrentTable.Rows [clickedI ndex] [「Kolicina」] =「」我需要 獲得不同行的單元格的值。

  protected void btnTest_Click(object sender, EventArgs e) 
    { 

     DataTable dtCurrentTable = (DataTable)ViewState["Markici"]; 
     var clickedRow = ((Button)sender).NamingContainer as GridViewRow; 

     var clickedIndex = clickedRow.RowIndex; 

     //so here i want to get current value of cell, and modify her    

      dtCurrentTable.Rows[clickedIndex]["Kolicina"] = " ";    

     GridView2.DataSource = dtCurrentTable; 
     GridView2.DataBind(); 


    } 

回答

0

在RowDataBound事件中,EventArgument e應該包含綁定的當前項目的索引。代碼e.Row.RowIndex將返回Grid中行的索引,而不是在應用分頁時的數據源。有一個'DataItemIndex'屬性,另一個索引可能會給你你正在尋找什麼,這取決於你想要做什麼。

該網格還公開了Rows集合,您可以使用foreach循環遍歷每個集合,並以這種方式訪問​​。

請注意,回發中的行將僅基於通過視圖狀態公佈的標記;網格對您的數據源一無所知(除非您在每次回發中重新綁定)。

1

試試這個。

protected void btnTest_Click(object sender, EventArgs e) 
{ 
    var clickedRow = ((Button)sender).NamingContainer as GridViewRow; 
    var clickedIndex = clickedRow.RowIndex; 
} 

提供你的GridView 沒有排序或分頁啓用,從這個clickedIndex,我們可以得到這樣的數據表中的相應行。

dtCurrentTable.Rows[clickedIndex]["Kolicina"] = "StackOverflow"; 
+0

非常感謝。這幫助我很多! – programmingcenter

+0

好的,在dtCurrentTable.Rows [0] [「Kolicina」] = count列中有一個問題more..value。 - >該計數是點擊按鈕的計數器,並且在每一行都不相同。因此,我有很多按鈕的計數器,如何知道在哪個計數器計數 - 設置? dtCurrentTable.Rows [clickedIndex] [「Kolicina」] =「」; – programmingcenter

+0

如果我認爲是真的,它應該是'clickedIndex + 1'。 – naveen

相關問題