ASP.NET网格视图中绑定字段的最大长度

yk9xbfzb  于 2023-02-26  发布在  .NET
关注(0)|答案(4)|浏览(142)

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

qnzebej0

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))");
gcuhipw9

gcuhipw92#

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(或者其他事件)事件,在网格中显示文本框,在这里你可以设置文本框的最大长度。
或者,This example可能会有所帮助。

t40tm48m

t40tm48m3#

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

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

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>

相关问题