我必须在可编辑的网格视图中设置绑定字段的最大长度。为此,我使用了数据格式字符串属性,并将ApplyFormatInEditMode设置为“true”,但它仍接受无效输入。网格视图没有模板字段,它仅包含绑定字段。我编写了OnRowEditing和RowUpdating事件。数据格式字符串为DataFormatString="{0:N 0}”,但它也接受“2352345234523454352345”输入,并在数据库中更新时显示服务器错误。我希望指定单击“编辑”按钮时动态生成的文本框的最大长度。
qnzebej01#
我在gridview的Rowdatabound事件中编写了以下代码。在此事件中,我隐式地将gridview单元格转换为动态生成的文本框,并为它们设置了宽度和最大长度。在key press事件中,我阻止了字母表和其他特殊字符输入文本框。现在,它可以正常工作了!代码如下所示:
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))");
gcuhipw92#
DataFormatString不处理MaxLength。尝试在文本框内使用DataBinder.Eval(),并在此处设置MaxLength。如下所示:
DataFormatString
MaxLength
DataBinder.Eval()
<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(或者其他事件)事件,在网格中显示文本框,在这里你可以设置文本框的最大长度。或者,This example可能会有所帮助。
asp:BoundField
t40tm48m3#
您可以对已经呈现的文本框使用Jquery,前提是您为它们分配了一个CSS类。
$(".numericInputTextBox").each(function() { $(this).attr("MaxLength", "9"); )};
tnkciper4#
正如您提到的,这是针对可编辑网格视图的,因此您真正需要做的是在网格视图处于编辑模式时设置TextBox的MaxLength属性。为此,您需要将BoundField替换为TemplateField,然后使用EditItemTemplate创建具有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>
4条答案
按热度按时间qnzebej01#
我在gridview的Rowdatabound事件中编写了以下代码。在此事件中,我隐式地将gridview单元格转换为动态生成的文本框,并为它们设置了宽度和最大长度。在key press事件中,我阻止了字母表和其他特殊字符输入文本框。现在,它可以正常工作了!代码如下所示:
gcuhipw92#
DataFormatString
不处理MaxLength
。尝试在文本框内使用DataBinder.Eval()
,并在此处设置MaxLength
。如下所示:--编辑--
asp:BoundField
本质上是显示记录的,所以你无法设置它的MaxLength。我必须在一个可编辑的网格视图中设置绑定字段的最大长度。
你可以抓取edit_button_click(或者其他事件)事件,在网格中显示文本框,在这里你可以设置文本框的最大长度。
或者,This example可能会有所帮助。
t40tm48m3#
您可以对已经呈现的文本框使用Jquery,前提是您为它们分配了一个CSS类。
tnkciper4#
正如您提到的,这是针对可编辑网格视图的,因此您真正需要做的是在网格视图处于编辑模式时设置TextBox的MaxLength属性。为此,您需要将BoundField替换为TemplateField,然后使用EditItemTemplate创建具有MaxLength属性的TextBox: