ASP.Net中gridview中绑定字段的最大长度

时间:2010-09-21 10:17:14

标签: c# asp.net

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

4 个答案:

答案 0 :(得分:3)

我通过在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))");

答案 1 :(得分: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可能会有所帮助。

答案 2 :(得分:2)

如果为其分配CSS类,则可以对已经渲染的文本框使用Jquery。

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

答案 3 :(得分:0)

正如您提到的,这是针对可编辑的Gridview,因此,您真正想做的是在gridview处于“编辑”模式时设置TextBox的MaxLength属性。为此,您将要用替换BoundField,然后使用来用MaxLength创建文本框:

<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>