2011-11-02 2 views
0

내 시나리오는 gridview가있는 경우 gridview가로드 될 때 itemtemplate 텍스트 상자와 버튼을 찍었습니다. 사용자가 ServiceCode를 기반으로 ServiceCode를 입력하고 버튼 클릭시 데이터가 있어야합니다. gridview에 표시, 데이터가 gridview에 표시되면 사용자가 수량과 할인을 입력 한 다음 결과를 netamount에 표시해야합니다. 코드를 작성했지만 작동하지 않습니다. 누군가가 지식을 공유하면 감사하겠습니다. 나를.Search gridview ItemTemplate 텍스트 상자 값이 buttonclick 인 경우

내 Axpx 코드는 다음과 같습니다

 <asp:GridView ID="GridView1" runat="server" Height="157px" Width="639px" 
     AutoGenerateColumns="False" BorderWidth="1px" 
     HorizontalAlign="Justify" onrowdatabound="GridView1_RowDataBound" 
     BackColor="LightGoldenrodYellow" BorderColor="Tan" CellPadding="2" 
     ForeColor="Black" GridLines="None" onrowcommand="GridView1_RowCommand"> 
     <FooterStyle BackColor="Tan" /> 
     <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" 
     HorizontalAlign="Center" /> 
     <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" /> 
     <HeaderStyle BackColor="#FFFFC4" Font-Bold="True" ForeColor="#BF6000"/> 
     <Columns> 
     <asp:TemplateField HeaderText="S.No"> 
     <ItemTemplate> 
     <asp:Label ID="label10" runat="server" Font-Bold="true" ForeColor="#BF6000"  Text="<%# Container.DataItemIndex + 1 %>"> 
     </asp:Label> 
     </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Serv Code" > 
     <ItemTemplate> 
     <asp:TextBox ID="TxtServiceCode" Font-Bold="true" ForeColor="#BF6000" Text='<%# DataBinder.Eval(Container,"DataItem.ServiceCode") %>' 
     runat="server" Width="55px"> 
     </asp:TextBox> 

     <asp:Button ID="Insert" runat="server" BackColor="Ivory" CommandName="InsertRecord" 
     Font-Bold="True" ForeColor="#BF6000" Text="Insert" onclick="Insert_Click"/> 

     </ItemTemplate> 
      </asp:TemplateField> 
     <asp:TemplateField HeaderText="Name"> 
     <ItemTemplate> 
      <asp:TextBox ID="TxtName" runat="server" ReadOnly="true" Font-Bold="true"   ForeColor="#BF6000" Width="150px" Text='<%# DataBinder.Eval(Container, "DataItem.ServiceName") %>'></asp:TextBox> 
      </ItemTemplate> 
     </asp:TemplateField> 
      <asp:TemplateField HeaderText="Serv Amt"> 
     <ItemTemplate> 
     <asp:TextBox ID="TxtServiceAmount" ReadOnly="true" Font-Bold="true" ForeColor="#BF6000" Text='<%# DataBinder.Eval(Container,"DataItem.ServiceAmount") %>' 
      runat="server" Width="55px"></asp:TextBox> 
     </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Qty"> 
     <ItemTemplate> 
      <asp:TextBox ID="TxtQuantity" Font-Bold="true" ForeColor="#BF6000" Text='<%#  DataBinder.Eval(Container,"DataItem.Quantity") %>' 
     runat="server" Width="55px"></asp:TextBox> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Disc Amt"> 
     <ItemTemplate> 
      <asp:TextBox ID="TxtdiscAmt" Font-Bold="true" ForeColor="#BF6000" Text ='<%# DataBinder.Eval(Container,"DataItem.Discount") %>' 
AutoPostBack="true" OnTextChanged="TxtdiscAmt_TextChanged" runat="server" Width="55px">    </asp:TextBox> 
      </ItemTemplate> 
      </asp:TemplateField> 

      <asp:TemplateField HeaderText="Net Amt"> 
      <ItemTemplate> 
       <asp:TextBox ID="lblNet" runat="Server" Font-Bold="true" ForeColor="#BF6000" Width="55" /> 
      </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
      <AlternatingRowStyle BackColor="PaleGoldenrod" /> 
      </asp:GridView> 

MY CS 코드는 다음과 같습니다

DataSet dss = new DataSet(); 
    SqlConnection MyConnection = new SqlConnection("server=prog;database=mydatabase; UID=sa;PWD=nato123;"); 

    SqlCommand sqlcmd = new SqlCommand("select * from [Bill]", MyConnection); 

    SqlDataAdapter adp = new SqlDataAdapter(sqlcmd); 
    DataSet ds = new DataSet(); 
    adp.Fill(ds); 

    GridView1.DataSource = ds.Tables[0]; 

    GridView1.DataBind(); 
    } 

답변

2

대신, 내가 OnCommand를 사용하고 CommandArgument의 항목 인덱스를 통과 할 버튼 OnClick 이벤트를 사용 :

<asp:Button ID="Button1" runat="server" OnCommand="Button1_Command" CommandArgument='<%#Container.ItemIndex%>' /> 

코드 숨김 :

protected void Button1_Command(object sender, CommandEventArgs e) 
{ 
    GridViewRow row = GridView1.Rows[(int)e.CommandArgument]; 
    if (row != null) 
    { 
     TextBox txt = row.FindControl("TextBox1") as TextBox; 
     if (txt != null) 
     { 
      string value = txt.Text; 
     } 
    } 
} 
관련 문제