我想在表格中为每列生成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();
}
}
}
}
答案 0 :(得分:0)
如果可能,请避免使用Web表单并移至MVC。如果不是,它不是世界末日,而是你生活在黑暗时代。此外,永远不会使用内联SQL。切换到EF或Insight.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
将完成任务。