0

GridViewを備えたUpdatePanelがあります。このGridViewには、テキストボックスであるテンプレート列があります。問題は、textchangeイベントがテキストボックスに対して発生しないことです。

私はどこが間違っていますか?

コードは次のとおりです。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="updatepanelgridview.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:ScriptManager ID="scrManager" runat="server"> 
</asp:ScriptManager> 
<asp:UpdatePanel ID="updPnl" runat="server"> 
<ContentTemplate> 
<asp:GridView ID="grdNumber" runat="server"> 
<Columns> 
<asp:TemplateField> 
<ItemTemplate> 

<asp:TextBox ID="txtNumber" runat="server" OnTextChanged="TextBox1_TextChanged"  AutoPostBack="true"></asp:TextBox>
</ItemTemplate> 
</asp:TemplateField> 
</Columns> 

<Columns> 
<asp:TemplateField> 
<ItemTemplate> 
<asp:DropDownList ID="ddlNumber" runat="server" OnSelectedIndexChanged="ddlNumber_SelectedIndexChanged" AutoPostBack="true" > 

<asp:ListItem>One</asp:ListItem> 
<asp:ListItem>Two</asp:ListItem> 
<asp:ListItem>Three</asp:ListItem> 
<asp:ListItem>For</asp:ListItem> 
</asp:DropDownList> 

</ItemTemplate> 
</asp:TemplateField> 
</Columns> 
</asp:GridView> 
</ContentTemplate> 
</asp:UpdatePanel> 

    </div>
    </form>
</body>
</html>

そして、ここにコードビハインドがあります:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
namespace updatepanelgridview
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataTable dt = new DataTable();
                dt.Rows.Add();
                dt.Rows.Add();
                dt.Rows.Add();
                dt.Rows.Add();

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

        protected void ddlNumber_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void TextBox1_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

ここでは、適切に機能する2番目の列のドロップダウンリストを使用していますが、テキストボックスのtextchangeイベントがモミにならないので、何が間違っているのかを提案してください。

4

1 に答える 1

0

更新パネルの更新モードプロパティを[常に]に設定します。

<asp:UpdatePanel ID="updPnl" runat="server" UpdateMode="Always">

TextBox1_TextChangedイベントの下のコードビハインドファイルでは、sender.textプロパティを使用して最新の値を取得できます。

updateModeを条件付きに設定した場合、その場合はトリガーを追加する必要があります。

---------------------これは私が試したコードとその動作です------------------

<%@ Page Title="About Us" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeFile="About.aspx.cs" Inherits="About" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <div>
        <asp:ScriptManager ID="scrManager" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="updPnl" runat="server" >

            <ContentTemplate>
                <asp:GridView ID="grdNumber" runat="server">
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:TextBox ID="txtNumber" runat="server" OnTextChanged="TextBox1_TextChanged" AutoPostBack="true"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:DropDownList ID="ddlNumber" runat="server" OnSelectedIndexChanged="ddlNumber_SelectedIndexChanged"
                                    AutoPostBack="true">
                                    <asp:ListItem>One</asp:ListItem>
                                    <asp:ListItem>Two</asp:ListItem>
                                    <asp:ListItem>Three</asp:ListItem>
                                    <asp:ListItem>For</asp:ListItem>
                                </asp:DropDownList>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
</asp:Content>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

public partial class About : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataTable dt = new DataTable();
            dt.Rows.Add();
            dt.Rows.Add();
            dt.Rows.Add();
            dt.Rows.Add();

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

    protected void ddlNumber_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        var value = (sender as TextBox).Text;
    }
}
于 2013-01-30T06:04:56.773 に答える