如何从数据库字段长度动态设置绑定文本框的maxlength属性

时间:2013-01-21 10:43:48

标签: c# asp.net

我有一个asp.net 4.0 c#web应用程序。我在表单上使用listview和formview控件和模板。我试图控制绑定文本框的maxlength属性,而无需将字段大小硬编码到我的aspx页面中。我想在第一次加载应用程序时填充某些本地对象或数组,其中包含我的字段的列长度,然后使用这些值动态设置文本框的maxLength字段。 有很多方法可以尝试,我不确定什么是最有效的。 我的sql获取架构信息是

SELECT     TOP (100) PERCENT sys.sysobjects.name AS TableName, sys.syscolumns.name AS ColumnName, sys.systypes.name AS DataType, 
                      sys.syscolumns.length
FROM         sys.sysobjects INNER JOIN
                      sys.syscolumns ON sys.sysobjects.id = sys.syscolumns.id INNER JOIN
                      sys.systypes ON sys.syscolumns.xtype = sys.systypes.xtype WHERE     (sys.sysobjects.xtype = 'U') AND (sys.systypes.name <> 'sysname')
ORDER BY TableName, sys.syscolumns.colid

我如何在本地存储,所以我不必继续查询服务器,我可以使用c#动态设置它

我是半新手,因此可以提供的细节很多。

3 个答案:

答案 0 :(得分:0)

看到您从数据库中获取列长度,现在需要执行此操作txtBox.MaxLength 如果您已经将aspx页面设计为与数据库表紧密结合,则可以避免动态执行此操作 但如果你确定要这样做,那么:
1.)在应用程序启动时从数据库中获取所有值并从中生成字典缓存,只要应用程序启动它就会存在内存中。
2.)现在,在每个页面加载时,您需要从字典中读取这些值并使用TextBox.MaxLength属性来设置值。这样您就可以在将max length属性传递到客户端计算机之前调整它 多数民众赞成!

无论如何,任何此类方法都会降低应用程序性能。考虑预先设计aspx页面。

答案 1 :(得分:0)

有两种主要方法,静态变量(实质上是全局变量)或使用应用程序缓存。我个人更喜欢静态变量,因为我发现System.Web.Caching的API过于复杂。

这是你如何使用静态变量进行讨论的最佳方法(包括如何在.Net 4.0 +中使用新的Lazy类):

Why use System.Runtime.Caching or System.Web.Caching Vs static variables?

这是使用System.Web.Caching的方法:

http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx

我不会过分担心哪个更有效率,这样做的方法几乎完全相同。

答案 2 :(得分:0)

感谢您的建议。出于我的目的,我只是保持简单,因为这是一个相对较小的应用程序。 由于我使用模板,因此我在许多地方多次定义相同的字段。由于我的应用程序数据字段将不经常更改,这只是在应用程序中给我一个位置来更改maxLength属性。

在我的aspx页面中: 'MaxLength =“&lt;%#TableSchema.SomeField1Length%&gt;” /&GT;

我上了课

公共静态类TableSchema     {

    public static  int SomeField1Length
    {
    get { return 15; }

    }

    public static int SomeField2Length
    {
    get { return 100; }

    }

    public static int SomeField3Length
    {
        get { return 15; }

    }

}

似乎工作正常。我必须看看这是否会导致性能下降。