【问题标题】:Trigger postback on value change in GridView在 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)
  {
  }
}

【问题讨论】:

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

标签: javascript jquery asp.net ajax postback


【解决方案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获取控件触发的回发,谢谢。
猜你喜欢
  • 2014-08-21
  • 1970-01-01
  • 2023-03-10
  • 2012-06-27
  • 1970-01-01
  • 2021-09-08
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多