在 GridView 中触发值更改的回发

Posted

技术标签:

【中文标题】在 GridView 中触发值更改的回发【英文标题】:Trigger postback on value change in GridView 【发布时间】:2017-02-02 01:13:18 【问题描述】:

我在这个链接DyntimeSample中使用 dyndatetime

这在gridview中使用,每当用户选择一个新的日期或时间时,我想使用更新面板触发回发。我尝试跟踪分配值的文本框更改事件,但它不起作用。请提出解决方案。 在下面的代码中,我想在更改事件上触发文本框。 编辑:添加代码

 <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.dynDateTime.min.js" type="text/javascript">  </script>
<script src="Scripts/calendar-en.min.js" type="text/javascript"></script>

  <script type = "text/javascript">
   $(document).ready(function () 
    $(".Calender").dynDateTime(
        showsTime: true,
        ifFormat: "%Y/%m/%d %H:%M",
        daFormat: "%l;%M %p, %e %m,  %Y",
        align: "BR",
        electric: false,
        singleClick: false,
        displayArea: ".siblings('.dtcDisplayArea')",
        button: ".next()"
      );
   ); 
  </script>
</head>
<body>
<form id="form1" runat="server">
<div>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
    <asp:BoundField DataField="Name" HeaderText="Person" />
    <asp:TemplateField HeaderText="Date Of Birth">
        <ItemTemplate>
            <asp:TextBox ID="txtDOB" style="border: 0px solid #505050;"    AutoPostBack="True" OnTextChanged="txtDOB_OnTextChanged" runat="server" ReadOnly="true" class = "Calender" />
            <img src="calender.png" />
        </ItemTemplate>
        </asp:TemplateField>
        </Columns>
        </asp:GridView>
     <asp:Button ID="btnSave" runat="server" Text="Save" onclick="btnSave_Click" />
    </div>
   </form>
  </body>

隐藏代码

using System;
using System.Web.UI.WebControls;
using System.Data;

public partial class _Default : System.Web.UI.Page 

    protected void Page_Load(object sender, EventArgs e)
    
       if (!IsPostBack)
       
         this.BindGridWithDummyData();
       


private void BindGridWithDummyData()

    DataTable dt = new DataTable();
    dt.Columns.Add("Name");
    dt.Columns.Add("DateOfBirth");
    dt.Rows.Add();
    dt.Rows[0]["Name"] = "John";
    dt.Rows.Add();
    dt.Rows[1]["Name"] = "Sam";
    dt.Rows.Add();
    dt.Rows[2]["Name"] = "Tommy";
    GridView1.DataSource = dt;
    GridView1.DataBind();

protected void btnSave_Click(object sender, EventArgs e)

    foreach (GridViewRow row in GridView1.Rows)
    
        DateTime dob =   DateTime.Parse(Request.Form[row.FindControl("txtDOB").UniqueID]);
        //Save the date to Database here
    


  protected void txtDOB_OnTextChanged(object sender, EventArgs e)
  
  

【问题讨论】:

分享代码。 已添加代码,请检查。 我没有看到更新面板的任何内容。你试过用吗? 是的。它在更新面板中也不起作用。 【参考方案1】:

注意:如果您在更新面板中将 updateMode 设置为条件,则需要添加触发器。在 TextBox1_TextChanged 事件下的代码隐藏文件中,您可以使用 sender.text 属性获取最新值。

尝试使用以下方法:

<asp:ScriptManager ID="scrManager" runat="server">
</asp:ScriptManager>    
 <asp:UpdatePanel ID="updPnl" runat="server" UpdateMode="Always">
    <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>

在代码隐藏中:

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;

更多信息,请查看此链接:http://www.aspsnippets.com/Articles/Assign-PostBack-Trigger-Full-PostBack-for-LinkButton-inside-GridView-within-AJAX-UpdatePanel-in-ASPNet.aspx

【讨论】:

当值被javascript动态赋值时是否会触发这个事件。 您是否使用 JavaScript 赋值?希望这会奏效。 是的,dynDateTime 会将值设置为 javascript。 基本上,这行得通。我不确定您如何维护更新面板或 dynDateTime。但以上内容肯定会帮助您实现我想要触发或启动 TextBox 的内容。 这不会在javascript分配值时触发文本更改事件,但可以使用__EVENTTARGET获取控件触发的回发,谢谢。

以上是关于在 GridView 中触发值更改的回发的主要内容,如果未能解决你的问题,请参考以下文章

由 UpdatePanel 内 GridView 内的 LinkBut​​ton 触发的完整回发

在 MVC 的回发中保留 hiddenField 值

转发器会导致整个页面的回发,即使它位于更新面板内

如果控件的“可见”属性设置为“假”,它的任何事件都会触发吗?

在gridview中回发后Javascript代码不会运行

调用按钮单击gridview内的文件上传