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