如何在按下编辑按钮之前使TemplateField为只读?

Syn*_*ror 2 asp.net

我有一个GridView各种领域,其中一个我已经用过TemplateFields,以便有一个日期选择器.我已将其设置GridView为可编辑,对于所有其他字段,此功能非常好,并且在edit按下按钮之前它们会保持锁定状态.

不幸的是,这些TemplateField留在任何时候都是可编辑的.我希望他们保持只读,直到点击"编辑".

一些代码来说明我在做什么.

Default.aspx的

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
AutoGenerateColumns="False" DataSourceID="SqlDataSource1" 
AllowSorting="True" AutoGenerateEditButton="True" 
OnPreRender="GridView1_PreRender" 
CssClass="gvdatatablem, table table-striped table-bordered" 
DataKeyNames="fmatter" PageSize="25">

<Columns>
    <asp:TemplateField HeaderText="Letter Sent">
        <ItemTemplate>
             <asp:TextBox ID="udtltrsent" runat="server" ReadOnly="false" Class='datepicker' ></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:CheckBoxField DataField="uheld" HeaderText="Held" 
    SortExpression="uheld" />
    <asp:BoundField DataField="udtresponse" HeaderText="Response" 
    SortExpression="udtresponse" />
    <asp:BoundField DataField="clname1" HeaderText="clname1" 
    SortExpression="clname1" readonly="true" />
</Columns>

</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

底部的Javascript实现Datatables和Bootstrap datepicker

<script type="text/javascript">
    $(document).ready(function () {
    $('#example').DataTable();
    $('.datepicker').datepicker();
    });
</script>
Run Code Online (Sandbox Code Playgroud)

GridView1_PreRender方法也只是改变表格式,使Datatables工作

protected void GridView1_PreRender(object sender, EventArgs e)
        {
            if (GridView1.Rows.Count > 0)
            {
                //Replace the <td> with <th> and adds the scope attribute
                GridView1.UseAccessibleHeader = true;

                //Adds the <thead> and <tbody> elements required for DataTables to work
                GridView1.HeaderRow.TableSection = TableRowSection.TableHeader;

                //Adds the <tfoot> element required for DataTables to work
                //GridView1.FooterRow.TableSection = TableRowSection.TableFooter;
            }
Run Code Online (Sandbox Code Playgroud)

cha*_*tej 6

对我有用的解决方案是在ItemTemplate中使用标签和为文本框保留EditItemTemplate.编辑后,将该文本框日期标记为标签文本.

<Columns>
    <asp:TemplateField HeaderText="Letter Sent">
        <ItemTemplate>
             <asp:Label ID="lbldate" runat="server" ></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
             <asp:TextBox ID="udtltrsent" runat="server"  Class='datepicker' ></asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateField>    
</Columns> 
Run Code Online (Sandbox Code Playgroud)