【问题标题】:Max length for bound field in gridview in ASP.NetASP.Net 中网格视图中绑定字段的最大长度
【发布时间】:2010-09-21 10:17:14
【问题描述】:

我必须在可编辑的网格视图中设置绑定字段的最大长度。为此,我使用了数据格式字符串属性,并且还给出了 ApplyFormatInEditMode="true" 仍然接受无效输入。 gridview 没有模板字段,它只包含绑定字段。我已经编写了 OnRowEditing 和 RowUpdating 事件。数据格式字符串是 DataFormatString="{0:N0}" 但它也接受“2352345234523454352345”输入,并在数据库中更新时显示服务器错误。我想为单击编辑按钮时动态生成的文本框指定最大长度。

【问题讨论】:

  • 我也尝试将 HtmlEncode 属性添加为 false。但是还是不行!

标签: c# asp.net


【解决方案1】:

我通过在 gridview 的 Rowdatabound 事件中编写以下代码来完成此操作。在这种情况下,我已将 gridview 单元隐式转换为动态生成的文本框,并为它们设置宽度和最大长度。在按键事件中,我已阻止在文本框中输入字母和其他特殊字符。现在它按预期工作正常!代码如下:

if (e.Row.RowType == DataControlRowType.DataRow) 
    {
        for (int i = 0; i < dgv.Columns.Count - 1; i++)
        {
            if ((e.Row.Cells[i].Controls.Count > 0) && (e.Row.Cells[i].Controls[0] is TextBox))
            {
                ((TextBox)e.Row.Cells[i].Controls[0]).Width = 40;
                ((TextBox)e.Row.Cells[i].Controls[0]).MaxLength = 5;
            }
        }
    }            
    //To make the text box accept numbers, delete, backspace, numlock,dot only
    e.Row.Attributes.Add("onkeypress", "javascript: var Key = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;  return ((Key >= 48 && Key <= 57) || (Key == 110) || (Key == 190) || (Key == 8) || (Key == 46) || (Key == 144))");

【讨论】:

    【解决方案2】:

    DataFormatString 不处理 MaxLength。尝试在文本框中使用DataBinder.Eval(),并在那里设置MaxLength。如下:

    <asp:TemplateField HeaderText="My Text">
    <ItemTemplate>
    <asp:TextBox ID="txtID"  MaxLength="10" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "YOUR_BOUND_ITEM_NAME") %>'></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateField>
    

    --编辑--

    asp:BoundField 本质上显示记录。所以没有办法设置它的MaxLength。

    我必须在可编辑的网格视图中设置绑定字段的最大长度。

    您可以获取在网格中显示文本框的 edit_button_click(或任何事件)事件。在那里你可以设置文本框的 MaxLength。

    或者,This example 可能会有所帮助。

    【讨论】:

    • 我没有使用模板字段,我只在gridview中使用绑定字段!
    • 替换成上面的sn -p;它与BoundField 的工作方式相同。
    • 请在绑定字段本身提出解决方案!我们不能将绑定字段更改为模板字段。虽然我们可以轻松地在编辑项模板中添加文本框,甚至添加验证甚至 ajax 扩展程序,但我们必须仅使用绑定字段来完成此功能。
    • 我已经使用绑定字段本身完成了这个功能!!感谢您的帮助,请检查答案。
    【解决方案3】:

    您可以对已经呈现的文本框使用 Jquery,前提是您为它们分配 CSS 类。

    $(".numericInputTextBox").each(function() {
         $(this).attr("MaxLength", "9");
     )};
    

    【讨论】:

      【解决方案4】:

      正如你提到的,这是一个可编辑的网格视图,所以你真正想要做的是在网格视图处于编辑模式时设置 TextBox 的 MaxLength 属性。为此,您需要将 BoundField 替换为 ,然后使用 MaxLength 创建 TextBox:

      <asp:TemplateField HeaderText="My Field Name">
          <ItemTemplate><%# Eval("sMyFieldName")%></ItemTemplate>
          <EditItemTemplate>
              <asp:TextBox runat="server" ID="sMyFieldName" Text='<%# Bind("sMyFieldName") %>' Width="250" MaxLength="10" ></asp:TextBox>
          </EditItemTemplate>
      </asp:TemplateField>
      

      【讨论】:

        猜你喜欢
        • 2013-07-14
        • 1970-01-01
        • 1970-01-01
        • 2021-02-17
        • 2013-06-25
        • 1970-01-01
        • 2015-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多