向可编辑网格视图添加行后不显示日期选择器

本文关键字:显示 日期 选择器 添加行 编辑 网格 视图 | 更新日期: 2023-09-27 18:10:52

我有一个可编辑的Gridview,列如下:

    <asp:TemplateField HeaderText="Date" >
        <ItemTemplate>
            <asp:TextBox ID="TextBox2" runat="server" Width="160" CssClass="DateTimePicker" ></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Amt $">
        <ItemTemplate>
             <asp:TextBox ID="TextBox3" runat="server" Width="160"></asp:TextBox>
        </ItemTemplate>
        <FooterStyle HorizontalAlign="Right" />
        <FooterTemplate>
         <asp:Button ID="ButtonAdd" runat="server" Text="Add Stage" onclick="ButtonAdd_Click" />
        </FooterTemplate>
    </asp:TemplateField>
    </Columns>

正如你所看到的,这个gridview作为底部的一个按钮,允许用户向gridview添加行。

我想有一个日历弹出我的日期列,所以我使用jQuery (Keith Wood)和调用JS函数像这样:

    $(function () {
                $('.DateTimePicker').datepick({ dateFormat: 'dd MM yyyy' });
            });

在我的gridview中,当我第一次点击Date文本框(第一行)时,日历弹出。但是,一旦我向gridview添加了一行,日历函数就不再出现了。

这是我从代码后面添加一个新行到gridview的方式:

    private void AddNewRowToGrid()
    {
        int rowIndex = 0;
        if (ViewState["CurrentTable"] != null)
        {
            DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
            DataRow drCurrentRow = null;
            if (dtCurrentTable.Rows.Count > 0)
            {
                for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
                {
                    //extract the TextBox values
                    TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
                    TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");
                    TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");

                    drCurrentRow = dtCurrentTable.NewRow();
                    drCurrentRow["RowNumber"] = i + 1;
                    dtCurrentTable.Rows[i - 1]["Column1"] = box1.Text;
                    dtCurrentTable.Rows[i - 1]["Column2"] = box2.Text;
                    dtCurrentTable.Rows[i - 1]["Column3"] = box3.Text;
                    rowIndex++;
                }
                dtCurrentTable.Rows.Add(drCurrentRow);
                ViewState["CurrentTable"] = dtCurrentTable;
                Gridview1.DataSource = dtCurrentTable;
                Gridview1.DataBind();
            }
        }
        else
        {
            Response.Write("ViewState is null");
        }
        //Set Previous Data on Postbacks
        SetPreviousData();
    }

任何想法为什么我的日历不弹出一旦我添加新的行到gridviews?

干杯!

向可编辑网格视图添加行后不显示日期选择器

这种情况只发生在使用UpdatePanel时。

现在当你使用UpdatePanel时,在每个UpdatePanel上Dom都发生了变化,javascript需要重新初始化。现在,在您的示例中,您添加了新行,并进行了ajax更新,因此需要重新初始化日期选择器。

这可以从UpdatePanel附带的函数中完成,如:

<script type="text/javascript"> 
   // when dom is ready we initialize the UpdatePanel requests
   $(document).ready(function () {
       var prm = Sys.WebForms.PageRequestManager.getInstance();    
       prm.add_initializeRequest(InitializeRequest);
       prm.add_endRequest(EndRequest);
       // Place here the first init of the DatePicker           
       $('.DateTimePicker').datepick({ dateFormat: 'dd MM yyyy' });
    });        
    function InitializeRequest(sender, args) {
       // make unbind before update the dom, to avoid memory leaks.
       $('.DateTimePicker').unbind();
    }
    function EndRequest(sender, args) {
       // after update occur on UpdatePanel re-init the DatePicker
       $('.DateTimePicker').datepick({ dateFormat: 'dd MM yyyy' });
    }
</script>

相似:Asp。Jquery DatePicker
动态创建控件的日期选择器

$(function () {

        $('.DateTimePicker').datepick({ dateFormat: 'dd MM yyyy' });
    });

这意味着它会击中一次。尝试像这样使用forEach函数:

$(function () {
        $('.DateTimePicker').each(function () {
            $(this).datepick({ dateFormat: 'dd MM yyyy' });
         });
        //$('.DateTimePicker').datepick({ dateFormat: 'dd MM yyyy' });
    });