65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET Webform 生成器

starIconstarIconstarIconstarIconstarIcon

5.00/5 (8投票s)

2015 年 4 月 5 日

CPOL

1分钟阅读

viewsIcon

28686

当提供连接字符串和表名时,此工具将读取字段数据类型,并为您创建 asp 控件,以便复制并粘贴到您自己的项目中。

引言

很多时候,我发现自己在不同的项目中重新创建类似的 Web 表单。即使将我以前的代码复制粘贴到新项目中也需要修改。所以,作为一名懒人,在一个晚上有空闲时间,我决定编写一个小工具来帮助解决这个问题。您提供一个连接字符串和一个表名,它将根据该表和数据类型生成 asp 控件。

它还会根据列名生成 asp 标签,并将它们关联到相应的文本框、文本区域、复选框等。我想要添加的另一个很棒的功能是支持 JQuery 的日期选择器。如果在数据库中找到 datetime 字段类型,将创建一个带有相应标签的文本框(就像任何其他 varchar 数据类型一样),但它还会生成日期选择器所需的 JavaScript。

 

使用代码

实现起来非常简单。确保您引用了 JQuery 库。(我在我的项目中使用了版本 1.5,但它也应该可以很好地与较新版本一起工作)

将此代码放在页面的 javascript 部分。(您实际上不需要错误检查部分,但我还是把它放进去了。)

function ErrorCheck()
        {
            $("#<%=txtASPCode.ClientID %>").val("");
            $("#<%=txtJquery.ClientID %>").val("");
            TrimAllTextboxes();

            if ($("#<%=txtConnString.ClientID %>").val() == "")
            {
                alert("Connection string can not be blank.");
                return false;
            }
                return true;
        }
        function TrimAllTextboxes()
        {
            $("input[type=text], textarea").each(
            function ()
            {
                $(this).val($.trim($(this).val()));
            });
        }

并将此代码复制/粘贴到表单标签中

<asp:Label ID="lblConString" runat="server" Text="Connection String"></asp:Label>:
<asp:TextBox ID="txtConnString" runat="server" style="width:600px"></asp:TextBox><br />        
<asp:Label ID="lblTableName" runat="server" Text="Table Name (Optional)"></asp:Label>:
<asp:TextBox ID="txtTableName" runat="server" style="width:300px"></asp:TextBox><br />
<asp:Label ID="lblDatePickerOptions" runat="server" Text="JQuery Datepicker Options (Optional)"></asp:Label>:
<asp:TextBox ID="txtJQueryDatepickerOptions" runat="server" style="width:300px"></asp:TextBox><br />
<asp:Button ID="btnGenerate" runat="server" Text="Generate!" OnClientClick="ErrorCheck();" CausesValidation="true" /><br /><br/>
<h1>ASP Code:</h1>
<asp:TextBox ID="txtASPCode" runat="server" TextMode="MultiLine" Rows="20" style="width:100%"></asp:TextBox>
<h1>JQuery Code:</h1>
<asp:TextBox ID="txtJquery" runat="server" TextMode="MultiLine" Rows="20" style="width:100%"></asp:TextBox>

并且在代码隐藏文件中,有一些导入

Imports System.Data.SqlClient
Imports System.Data

其余代码都在 btnGenerate.Click 中

Try
            Dim Script As New StringBuilder
            Script.Append("SELECT table_name, column_name,data_type,character_maximum_length,column_default FROM information_schema.columns where table_name not like '%aspnet_%' and table_name not in( 'sysdiagrams') ")

            'if they specified a table name, filter by that
            If Not String.IsNullOrEmpty(Me.txtTableName.Text) Then
                Script.AppendFormat(" and table_name='{0}' ", Me.txtTableName.Text)
            End If

            Script.Append("ORDER BY table_name, ordinal_position")
            Dim ASPCode As New StringBuilder
            Dim JQueryCode As New StringBuilder
            Using SelectCommand As New SqlCommand
                With SelectCommand
                    .Connection = New SqlConnection(Me.txtConnString.Text)
                    .CommandType = CommandType.Text
                    .CommandText = Script.ToString
                    .Connection.Open()
                    Using dr As SqlDataReader = .ExecuteReader
                        While dr.Read
                            Dim TableName As String = dr("table_name")
                            Dim DataType As String = dr("data_type").tolower
                            Dim DataLength As String = IIf(dr("character_maximum_length") Is DBNull.Value, "", dr("character_maximum_length"))
                            Dim ColumnName As String = dr("column_name")
                            Dim ColumnDefault As String = IIf(dr("column_default") Is DBNull.Value, "", dr("column_default")).ToString.TrimStart("(").TrimEnd(")").TrimStart("'").TrimEnd("'")
                            Dim AssociatedControlPrefix = ""
                            Dim Control As String = ""

                            'only show the table name if it isn't already shown
                            If Not ASPCode.ToString.Contains(String.Format("<h1>{0}</h1>", TableName)) Then
                                ASPCode.AppendFormat("<h1>{0}</h1>{1}", TableName, Environment.NewLine)
                            End If

                            'doing this with if instead of case as there are several date type of data types
                            If DataType = "bit" Then
                                'asp checkbox
                                AssociatedControlPrefix = "chkBox"
                                Control = String.Format("<asp:CheckBox ID=""{0}{1}"" Checked=""{2}"" runat=""server"" />", AssociatedControlPrefix, ColumnName, IIf(ColumnDefault = "((1))", "true", "false")) 'if the default value isn't null then set the checked equal to the default value
                            ElseIf DataType.Contains("date") Then
                                'textbox with jquery to bind as date picker
                                AssociatedControlPrefix = "txt"
                                Control = String.Format("<asp:TextBox ID=""{0}{1}"" runat=""server""></asp:TextBox>", AssociatedControlPrefix, ColumnName)
                                JQueryCode.AppendFormat("$(""#<%={0}{1}.ClientID%>"").datepicker({2});{3}", AssociatedControlPrefix, ColumnName, Me.txtJQueryDatepickerOptions.Text, Environment.NewLine)
                            Else
                                AssociatedControlPrefix = "txt"
                                If String.IsNullOrEmpty(DataLength) OrElse Not IsNumeric(DataLength) Then
                                    'no max length
                                    Control = String.Format("<asp:TextBox ID=""{0}{1}"" runat=""server"">{2}</asp:TextBox>", AssociatedControlPrefix, ColumnName, ColumnDefault)
                                Else
                                    'varchar(max) or blob or ntexts etc
                                    If (DataLength = -1 AndAlso DataType = "varchar") OrElse DataType = "ntext" OrElse DataType = "text" Then
                                        Control = String.Format("<asp:TextBox ID=""{0}{1}"" runat=""server"" TextMode=""MultiLine"">{2}</asp:TextBox>", AssociatedControlPrefix, ColumnName, ColumnDefault)
                                    Else
                                        'textbox with a max length for everything else
                                        Control = String.Format("<asp:TextBox ID=""{0}{1}"" runat=""server"" MaxLength=""{2}"">{3}</asp:TextBox>", AssociatedControlPrefix, ColumnName, DataLength, ColumnDefault)
                                    End If
                                End If
                            End If
                            Dim Label As String = String.Format("<asp:Label ID=""lbl{0}"" runat=""server"" Text=""{1}"" AssociatedControlID=""{2}{3}""></asp:Label>", ColumnName, ColumnName, AssociatedControlPrefix, ColumnName)

                            ASPCode.AppendFormat("{0}:{1}<br/>{2}", Label, Control, Environment.NewLine)                           
                        End While
                    End Using
                    .Connection.Close()
                End With
                Me.txtASPCode.Text = ASPCode.ToString
                If Not String.IsNullOrEmpty(JQueryCode.ToString) Then
                    Me.txtJquery.Text = String.Format("<script language=""javascript"" type=""text/javascript"">{0}$(document).ready(function(){{{0}{1}}});{0}</script>", Environment.NewLine, JQueryCode.ToString)
                End If
            End Using
        Catch ex As Exception
            Response.Write(ex.Message)
        End Try

 

关注点

我开玩笑地告诉我的朋友,程序员(通常)是懒人,但他们最终也会想出有用的工具来节省时间。基本上,这个小项目的想法就来自这里。

我希望它对您有所帮助,并能减少您的开发时间。:)

© . All rights reserved.