0

「Quantity」というテキストボックスの列を持つグリッドビューがあります。ここで、列のテキストが変更されたときにイベント ハンドラーを実行したいと考えています。

これはグリッドビューのコードです:

<asp:GridView ID="GridView_Products" runat="server" BackColor="White" 
        BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
        HorizontalAlign="Center" AutoGenerateColumns="False">

        <Columns>
            <asp:TemplateField HeaderText="Quantity">
                <ItemTemplate>
                    <asp:TextBox ID="Textbox_Quantity" runat="server" Width="30px" OnTextChanged="Text_ChangedEvent"></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="Image">
                <ItemTemplate>
                    <img src="Images/<%# Eval("Image_URL") %>" width="80" height="100" alt="Image" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>

        <FooterStyle BackColor="White" ForeColor="#000066" />
        <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" 
            HorizontalAlign="Center" />
        <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
        <RowStyle ForeColor="#000066" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
        <SortedAscendingCellStyle BackColor="#F1F1F1" />
        <SortedAscendingHeaderStyle BackColor="#007DBB" />
        <SortedDescendingCellStyle BackColor="#CAC9C9" />
        <SortedDescendingHeaderStyle BackColor="#00547E" />
    </asp:GridView>

これは Text_ChangedEvent イベント ハンドラです。

protected void Text_ChangedEvent(object sender, EventArgs e)
    {
        Validation val = new Validation();

        TextBox textbox_quantity = ((TextBox)(sender));
        GridViewRow row = ((GridViewRow)(textbox_quantity.NamingContainer));

        if (textbox_quantity.Text.Equals("0") == true)
        {
            Label_Error.Visible = true;
            Label_Error.Text = "Error Message: The quantity cannot be 0!";
        }

        else
        {
            if (val.IsNumeric(textbox_quantity.Text) == false)
            {
                Label_Error.Visible = true;
                Label_Error.Text = "Error Message: The quantity must be numeric!";
            }

            else
            {
                total = total + (Convert.ToDouble(textbox_quantity.Text) * Convert.ToDouble(row.Cells[5].Text));
                transaction.Add(textbox_quantity.Text);
            }
        }
    }

イベント ハンドラが実行されないのはなぜですか?

4

3 に答える 3

1

ページにポストバックするとイベント発生します。クライアント側で何かが変更された場合、結果がポストバックされるまで、サーバーが何かが変更されたことを知る方法はありません。

于 2013-07-03T19:06:57.993 に答える
1

AutoPostBack="true"TextBox に属性を設定します。

于 2013-07-03T19:07:55.420 に答える
1

を設定する必要がありますAutoPostBack="True"

ここにいくつかの解決策があります。

JavaScript を使用してクライアント側で検証を行うことを検討する必要があります。

于 2013-07-03T19:10:11.890 に答える