为db中的每个列生成标签和文本框

时间:2015-11-12 13:48:45

标签: c# asp.net visual-studio

我想在表格中为每列生成1个标签和1个文本框。我该怎么做?我想这将是一些声明,对每一列说,添加标签和文本框到页面。另外,我希望根据列的名称命名每个标签和文本框。

这就是我连接数据库的方式。我正在使用Visual Studio和C#。

        using (SqlConnection sqlConn2 = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionNameHere"].ConnectionString))
        {
            sqlConn2.Open();

            using (SqlCommand sqlCmd2 = new SqlCommand())
            {
                sqlCmd2.Connection = sqlConn2;
                sqlCmd2.CommandType = System.Data.CommandType.Text;
                sqlCmd2.CommandText = string.Format("SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS mWHERE table_name = 'registrants');
                sqlCmd2.ExecuteNonQuery();
                using (SqlDataReader sqlReader = sqlCmd2.ExecuteReader())
                {
                  //Some code here?
                }



                sqlConn2.Close();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

如果可能,请避免使用Web表单并移至MVC。如果不是,它不是世界末日,而是你生活在黑暗时代。此外,永远不会使用内联SQL。切换到EFInsight.Database之类的ORM,或使用存储过程和参数化ADO.NET调用。

现在我们已经完成了这项工作。

实际上很简单,您需要进行一些阅读以完全掌握如何将数据集或数据表绑定到Web表单Web控件。数据网格可能是你最好的选择。

上面的两个链接都详细说明了绑定方面,并解释了如何正确使用它们。同样,如果可以避免这种情况,那肯定是我的建议。

此外,您的ADO.NET调用将填充DataTable或DataSet,然后将其传递给Form以进行加载/绑定。

using (SqlConnection sqlConn2 = new sqlConnection(ConfigurationManager.ConnectionStrings["ConnectionNameHere"].ConnectionString))
{
    sqlConn2.Open();

    using (SqlCommand sqlCmd2 = new SqlCommand())
    {
        sqlCmd2.Connection = sqlConn2;
        sqlCmd2.CommandType = System.Data.CommandType.Text;
        sqlCmd2.CommandText = string.Format("SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS mWHERE table_name = 'registrants');
        var dataTable = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dataTable);            
        sqlConn2.Close();

        return dataTable;
    }
}

答案 1 :(得分:0)

ASP.NET Repeater控制是解决问题的理想解决方案,您只需定义一个模板(对于标签和文本框),它就会相应地绑定它们。

定义这样的转发器控件: -

<asp:Repeater ID="Repeater1" runat="server">
   <ItemTemplate>
        <asp:Label ID="lblTest" runat="server" Text='<%# Eval("MyColumn") %>'></asp:Label>
        <asp:TextBox ID="textTest" runat="server"></asp:TextBox>
   </ItemTemplate>
</asp:Repeater>

然后,像这样更改您的查询: -

DataTable table = new DataTable();
table.Columns.Add("MyColumn", typeof(string));
//Your rest code (connection object and all)
sqlCmd2.CommandText = "SELECT COLUMN_NAME  AS MyColumn
                       FROM INFORMATION_SCHEMA.COLUMNS
                       WHERE TABLE_NAME = @TableName";
sqlCmd2.Parameters.Add("@TableName",SqlDbType.NVarChar).Value = "registrants";
sqlConn2.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
       DataRow tableRow = table.NewRow();
       tableRow["MyColumn"] = reader["MyColumn"].ToString();
       table.Rows.Add(tableRow);
     }
     Repeater1.DataSource = table;
     Repeater1.DataBind();
}

另外,请注意您不应该使用ExecuteNonQuery它主要用于DML操作。使用ExecuteReader将完成任务。