4

テキストボックスの数量 (DB での数量) は Basket DB テーブルから Eval() メソッドを介してロードされます。私が達成したいのは、数量を手動で変更して更新をクリックすると、そのレコードの数量が更新され、グリッドがリロードされることです。コードビハインドでそのテキストボックスの値を取得できないようです。

itemtemplate 内のコントロールから値を取得するために使用される FindControl() メソッドは知っていますが、ここでの使用方法がわかりません。

以下で試しましたが、常に nullReferenceException を取得します

TextBox txt = (TextBox)GridView2.FindControl("txtQuantityWanted");
int _quantity = Convert.ToInt16(txt.Text);

注: ボタンはありますが、何もしません。

ここに画像の説明を入力

<ItemTemplate>        
    <asp:TextBox runat="server" ID="txtQuantityWanted" Text='<%# Eval("quantityWanted") %>' ></asp:TextBox>
    <asp:LinkButton ID="LinkButton11" runat="server" CommandName="update" CommandArgument='<%# Eval("coffeeName") + ";" + Eval("datetimeAdded")  %>' >Update</asp:LinkButton>
    <asp:Button ID="Button21" runat="server" Text="Button" CommandName="edit" />
</ItemTemplate> 

<asp:TemplateField HeaderText="Total [£]">
    <ItemTemplate>
        <asp:Label id="lblItemTotal" runat="server" Text='<%# String.Format("{0:C}", Convert.ToInt32(Eval("quantityWanted"))* Convert.ToDouble(Eval("price"))) %>' ></asp:Label> 
        <asp:LinkButton ID="LinkButton1" runat="server" CommandName="remove" CommandArgument='<%# Eval("coffeeName") + ";" + Eval("datetimeAdded") %>' >Remove</asp:LinkButton>
    </ItemTemplate> 
</asp:TemplateField>

C# コード:

protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
{
    // .....
    else if (e.CommandName == "update")
    {
        string params = Convert.ToString(e.CommandArgument);
        string[] arg = new string[2];
        arg = params.Split(';');
        name = Convert.ToString(arg[0]);
        datetimeAdded = Convert.ToString(arg[1]);

        const string strConn = @"Data Source=.\SQLEXPRESS;AttachDbFilename=L:\ASP.NET\Exercise1\Exercise1\Exercise1\App_Data\ASPNETDB.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True";

        DataSet ds = new DataSet("Employees");
        SqlConnection connection = new SqlConnection(strConn);

        // Here I need value from textbox to replace 11
        SqlCommand abc = new SqlCommand("UPDATE Basket SET quantityWanted = 11 WHERE coffeeName LIKE '%" + name + "%' AND datetimeAdded LIKE '" + datetimeAdded + "' ", connection);
        connection.Open();
        int ii = abc.ExecuteNonQuery();
        connection.Close();
    }
}
4

3 に答える 3

4

GridView.Rows コレクションを使用してコントロールを見つけます。行コレクション インデクサーで行のインデックスを渡すことができます。

TextBox txt = (TextBox)GridView2.Rows[0].FindControl("txtQuantityWanted");
于 2013-03-13T12:19:46.273 に答える
3

行インデックスも渡す必要があります。コードは次のようになります。

TextBox txt = (TextBox)GridView2.Rows[0].FindControl("txtQuantityWanted");

それがあなたのために働くことを願っています。

于 2013-03-13T12:21:38.073 に答える
2
  Control ctrl = e.CommandSource as Control;  

   if (ctrl != null)    
   {    
       GridViewRow gvRow = ctrl.Parent.NamingContainer as GridViewRow;     

       TextBox txt= (TextBox)gvRow.FindControl("txtQuantityWanted"); 
   }
于 2013-03-13T12:24:51.477 に答える