发送列号值到asp MaxLength

时间:2018-07-10 06:20:32

标签: c# asp.net webforms

我在数据库中有一列存储整数值(4、6、8和NULL)。 这些整数值应为TextBox的最大允许长度,即table

这是来自c#的代码,我现在在其中传递了特征名称和整数(动态地从数据库中获取文本框的最大位数)。

protected void ddlBC_SelectedIndexChanged(object sender, EventArgs e)
{
    //ddlKar.Items.Clear(); 
    LogicTableAdapters.getLvLOneIntegerTableAdapter getKar = new LogicTableAdapters.getLvLOneIntegerTableAdapter();

    DataTable dtKar = getKar.getLvLOneInteger(ddlBC.SelectedValue);

    DataTable dt = new DataTable();
    dt.Columns.AddRange(new DataColumn[2]{ new DataColumn("CharacteristicName", typeof(string)) new DataColumn("MaxNoPlaces", typeof(string))});

    foreach (DataRow dr in dtKar.Rows)
    {
        dt.Rows.Add(dr["CharacteristicName"].ToString(), dr["MaxNoPlaces"].ToString());
    }

    gvKarakteristike.DataSource = dt;
    gvKarakteristike.DataBind();
}

这是ASPX标记:

 <asp:GridView ID="gvKarakteristike" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateColumns="False" DataKeyNames="LevelID" OnRowDataBound="gvKarakteristike_RowDataBound">
     <AlternatingRowStyle BackColor="White" />
     <Columns>
         <asp:TemplateField HeaderText="Characteristics">
             <ItemTemplate>
                 <asp:Label ID="Characteristics" runat="server" Width="150px" Height="30px" Font-Names="Georgia" margin-Left="100px" Text='<%# Bind("CharacteristicName") %>'></asp:Label>
             </ItemTemplate>
         </asp:TemplateField>

         <asp:TemplateField HeaderText="Description">
             <ItemTemplate>
                 <asp:DropDownList ID="ddlOpis" AppendDataBoundItems="true"  Width="142px" Height="35px" Font-Names="Georgia" margin-Left="100px" runat="server">
                     <asp:ListItem Text="" Value="" />
                 </asp:DropDownList>

                 <asp:TextBox ID="txtBoxOpis" runat="server"  Font-Names="Georgia" margin-Left="100px" Text="" MaxLength='<%# Bind("MaxNoPlaces") %>'></asp:TextBox>
             </ItemTemplate>
         </asp:TemplateField>
    </Columns>

    <EditRowStyle BackColor="#2461BF" />
    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
    <RowStyle BackColor="#EFF3FB" />
    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
    <SortedAscendingCellStyle BackColor="#F5F7FB" />
    <SortedAscendingHeaderStyle BackColor="#6D95E1" />
    <SortedDescendingCellStyle BackColor="#E9EBEF" />
    <SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>

我需要直接从数据库动态地进行此操作,因为数据库会随着时间的增长而增长,因此文本框的数量也会随之增长。

问题出在这部分代码上:

<asp:TextBox ID="txtBoxOpis" runat="server"  Font-Names="Georgia" margin-Left="100px" Text="" MaxLength='<%# Bind("MaxNoPlaces") %>'></asp:TextBox>

在此运行应用程序时出现错误:

  

App_Web_kn224wf0.dll中发生了'System.InvalidCastException'类型的异常,但未在用户代码中处理

我认为问题在于当NULL值从数据库发送到asp时,它可以将其转换为MaxLength。

有人可以帮助我解决此问题吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

TextBox.MaxLength属性的值类型为int,如以下声明所示:

public virtual int MaxLength { get; set; }

由于在MaxNoPlaces绑定的string中用DataTable数据类型声明的GridView.DataBind()列,将InvalidCastException直接绑定到相应的属性时会遇到。绑定前,您应该使用typeof(int)并进行Convert.ToInt32()int.Parse()之类的整数转换:

dt.Columns.AddRange(new DataColumn[2]{ new DataColumn("CharacteristicName", typeof(string)), 
                    new DataColumn("MaxNoPlaces", typeof(int))});

foreach (DataRow dr in dtKar.Rows)
{
    // perform integer conversion
    dt.Rows.Add(dr["CharacteristicName"].ToString(), Convert.ToInt32(dr["MaxNoPlaces"]));
}

如果您在绑定到文本框控件之前完成了转换,则不需要像<asp:TextBox runat="server" MaxLength='<%# Convert.ToInt32(Bind("MaxNoPlaces")) %>' ... />这样的绑定转换。