2013-10-29 2 views
1

나는 동적 gridview를 가지고 있고 ... 네 개의 열이 있습니다. 원하는 것은 마지막 열 "amount paid"에서 gridview의 textbox 값에 액세스하여 총 합계 값을 표시하는 것입니다 label.Below는 내가 시도한 코드입니다. 누군가 이걸 어떻게하는지 알려 줄 수 있습니까?gridview에서 textbox 값에 액세스

ASP.NET

<asp:gridview ID="Gridview2" runat="server" ShowFooter="true" CssClass="vutblrow" 
                   TabIndex="3" HeaderStyle-CssClass="vutblhdr" 
                   CellPadding="4" ForeColor="#333333" GridLines="None" Width="1%" 
                   PagerStyle-Mode="NumericPages" 


      AutoGenerateColumns="false" onrowcreated="Gridview2_RowCreated" Height="16px"> 
       <PagerStyle CssClass="pgr" Height="25px" BorderStyle="Solid" /> 
      <Columns> 
      <asp:BoundField DataField="RowNumber" HeaderText="Serial Number" /> 
      <asp:TemplateField HeaderText="From Place"> 
       <ItemTemplate> 

        <asp:TextBox ID="Textfrom" runat="server" CssClass="txtBoxNormalmedium"></asp:TextBox> 
       </ItemTemplate> 

      </asp:TemplateField> 

      <asp:TemplateField HeaderText="To Place"> 
       <ItemTemplate> 
        <asp:TextBox ID="Textto" runat="server" CssClass="txtBoxNormalmedium"></asp:TextBox> 
       </ItemTemplate> 

      </asp:TemplateField> 

      <asp:TemplateField HeaderText="Distance Travelled (kms)"> 
       <ItemTemplate> 
        <asp:TextBox ID="TextBoxdist" runat="server" CssClass="txtBoxNormalmedium"></asp:TextBox> 
       </ItemTemplate> 

      </asp:TemplateField> 




      <asp:TemplateField HeaderText="Amount Paid (per km)"> 
       <ItemTemplate> 
        <asp:TextBox ID="TextBoxamt" runat="server" CssClass="txtBoxNormalmedium"></asp:TextBox> 
       </ItemTemplate> 

       <FooterStyle HorizontalAlign="Right" /> 
       <FooterTemplate> 
       <asp:Button ID="ButtonAdd1" runat="server" Text="Add New Row" 
         CssClass="btnNormalAdd" OnClick="add" /> 
       </FooterTemplate> 
      </asp:TemplateField> 
       <asp:TemplateField> 
       <ItemTemplate> 
        <asp:LinkButton ID="LinkButton2" runat="server" 
         CssClass="lnkbut" OnClick="LinkButton2_Click">Remove</asp:LinkButton> 
       </ItemTemplate> 
      </asp:TemplateField> 
      </Columns> 
     </asp:gridview> 


                 <asp:Label ID="lblTotal" runat="server" Text="Label"></asp:Label> 

C# 코드 :

namespace Test.Test 
{ 
    public partial class WebForm6 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
     if (!IsPostBack) 
     { 
      SetInitialRow1(); 
     } 
     } 

     private void AddNewRowToGrid1() 
     { 
     int rowIndex = 0; 

     if (ViewState["CurrentTable"] != null) 
     { 
      DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"]; 
      DataRow drCurrentRow = null; 
      if (dtCurrentTable.Rows.Count > 0) 
      { 
       for (int i = 1; i <= dtCurrentTable.Rows.Count; i++) 
       { 
        //extract the TextBox values 
        TextBox box1 = (TextBox)Gridview2.Rows[rowIndex].Cells[1].FindControl("Textfrom"); 
        TextBox box2 = (TextBox)Gridview2.Rows[rowIndex].Cells[2].FindControl("Textto"); 
        TextBox box3 = (TextBox)Gridview2.Rows[rowIndex].Cells[3].FindControl("TextBoxdist"); 
        TextBox box4 = (TextBox)Gridview2.Rows[rowIndex].Cells[3].FindControl("TextBoxamt"); 

        drCurrentRow = dtCurrentTable.NewRow(); 
        drCurrentRow["RowNumber"] = i + 1; 

        dtCurrentTable.Rows[i - 1]["Column1"] = box1.Text; 
        dtCurrentTable.Rows[i - 1]["Column2"] = box2.Text; 
        dtCurrentTable.Rows[i - 1]["Column3"] = box3.Text; 
        dtCurrentTable.Rows[i - 1]["Column4"] = box4.Text; 

        rowIndex++; 
       } 
        dtCurrentTable.Rows.Add(drCurrentRow); 
        ViewState["CurrentTable"] = dtCurrentTable; 
        Gridview2.DataSource = dtCurrentTable; 
        Gridview2.DataBind(); 
      } 
     } 
     else 
     { 
      Response.Write("ViewState is null"); 
     } 
     //Set Previous Data on Postbacks 
     SetPreviousData1(); 
    } 

    private void SetPreviousData1() 
    { 
     int rowIndex = 0; 
     if (ViewState["CurrentTable"] != null) 
     { 
     DataTable dt = (DataTable)ViewState["CurrentTable"]; 
     if (dt.Rows.Count > 0) 
     { 
      for (int i = 0; i < dt.Rows.Count; i++) 
      { 
       TextBox box1 = (TextBox)Gridview2.Rows[rowIndex].Cells[1].FindControl("Textfrom"); 
       TextBox box2 = (TextBox)Gridview2.Rows[rowIndex].Cells[2].FindControl("Textto"); 
       TextBox box3 = (TextBox)Gridview2.Rows[rowIndex].Cells[3].FindControl("TextBoxdist"); 
       TextBox box4 = (TextBox)Gridview2.Rows[rowIndex].Cells[3].FindControl("TextBoxamt"); 

       box1.Text = dt.Rows[i]["Column1"].ToString(); 
       box2.Text = dt.Rows[i]["Column2"].ToString(); 
       box3.Text = dt.Rows[i]["Column3"].ToString(); 
       box4.Text = dt.Rows[i]["Column4"].ToString(); 

       rowIndex++; 
      } 
      } 
     } 
    } 

    protected void add(object sender, EventArgs e) 
    { 
     AddNewRowToGrid1(); 
    } 

    protected void Gridview2_RowCreated(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
     DataTable dt = (DataTable)ViewState["CurrentTable"]; 
     LinkButton lb = (LinkButton)e.Row.FindControl("LinkButton1"); 
     if (lb != null) 
     { 
      if (dt.Rows.Count > 1) 
      { 
       if (e.Row.RowIndex == dt.Rows.Count - 1) 
       { 
        lb.Visible = false; 
       } 
      } 
      else 
      { 
       lb.Visible = false; 
      } 
     } 
     } 
    } 

    protected void LinkButton2_Click(object sender, EventArgs e) 
    { 
     LinkButton lb = (LinkButton)sender; 
     GridViewRow gvRow = (GridViewRow)lb.NamingContainer; 
     int rowID = gvRow.RowIndex + 1; 
     if (ViewState["CurrentTable"] != null) 
     { 
     DataTable dt = (DataTable)ViewState["CurrentTable"]; 
     if (dt.Rows.Count > 1) 
     { 
      if (gvRow.RowIndex < dt.Rows.Count - 1) 
      { 
       //Remove the Selected Row data 
       dt.Rows.Remove(dt.Rows[rowID]); 
      } 
     } 
     //Store the current data in ViewState for future reference 
     ViewState["CurrentTable"] = dt; 
     //Re bind the GridView for the updated data 
     Gridview2.DataSource = dt; 
     Gridview2.DataBind(); 
     } 
     //Set Previous Data on Postbacks 
    SetPreviousData1(); 
    } 

    private void SetInitialRow1() 
    { 
     DataTable dt = new DataTable(); 
     DataRow dr = null; 
     dt.Columns.Add(new DataColumn("RowNumber", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column1", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column2", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column3", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column4", typeof(string))); 

     dr = dt.NewRow(); 
     dr["RowNumber"] = 1; 
     dr["Column1"] = string.Empty; 
     dr["Column2"] = string.Empty; 
     dr["Column3"] = string.Empty; 
     dr["Column4"] = string.Empty; 

     dt.Rows.Add(dr); 
     //dr = dt.NewRow(); 

     //Store the DataTable in ViewState 
     ViewState["CurrentTable"] = dt; 

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

    } 
} 
+0

레이블은 GridView 뒤/아래에 정의됩니다. 모든 값을 합산하려고합니까, 아니면 각 행의 합계를 표시할까요? – CodeCanuck

+0

안녕하세요, 명확하게 문제를 지정하십시오. gridview에 총 금액이라는 열이 없습니다. gridview에서 총 열 값을 표시하려면, 또는 모든 이벤트에서 텍스트 상자에 액세스하려고합니다. –

+0

예 지불 한 금액의 모든 금액의 합계를 표시하고 싶습니다. – user2605927

답변

3
GridViewRow row = (GridViewRow)((Button)sender).NamingContainer; 
TextBox TextBox1 = row.FindControl("TextBox1") as TextBox; 

    //Access TextBox1 here. 
    string myString = TextBox1.Text; 

텍스트 상자에 자식 컨트롤이있는 gridview 행의 내부에 : 즉시 당신은 당신이 LINQ의 장점을 취할 수있는 데이터 소스를 조회와 같은 간단한 일을 할 수있는 서비스/저장소를 각 그리드 뷰 행에 대한 코드.

+0

알았어요! 고맙습니다 :) – user2605927

0

이 데이터 소스를 분리시겠습니까?

이렇게하면 마음과 질문이 명확 해집니다. 위 반복 할 수 있도록

var sum = datasource.Sum(p=>p.AmountPaid); 
+0

나는 고맙습니다. :) – user2605927