所有的信息都在下面,但主要想法是这样的: 我希望能够根据事件编号在我的中继器控制中显示或隐藏列。例如,事件5将显示某些列,如姓名和地址,并隐藏其他列,如电话和电子邮件。我想我可以以某种方式分配一个1或0来指出哪些应该使用或不使用。事件5使用名称将是51,不使用电话将是50.如何实现这一点,不知道。根据数据库中的列添加数据
信息: 我正在构建一个会议的Web应用程序。将有管理员可以创建网络表单供人们注册参加会议。我希望管理员能够控制他们为注册人收集哪些字段。只是为了测试目的,他们可以收集领域包括姓氏,姓名,地址,电子邮件,电话和衬衫尺寸
Table: Registrant
Columns: Id, EventId, FirstName, LastName, Address, Email, Phone, ShirtSize
根据不同的会议上,将有未使用的某些字段。例如,会议1想收集ShirtSize数据,但会议2不想收集ShirtSize数据。
我在Visual Studio中使用Repeater控件,该控件当前生成注册者的所有列。
ASP
<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>
C#
DataTable table = new DataTable();
table.Columns.Add("MyColumn", typeof(string));
using (SqlConnection sqlConn2 = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString))
{
sqlConn2.Open();
using (SqlCommand sqlCmd2 = new SqlCommand())
{
sqlCmd2.Connection = sqlConn2;
sqlCmd2.CommandType = System.Data.CommandType.Text;
sqlCmd2.CommandText = string.Format("SELECT COLUMN_NAME AS MyColumn FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName");
//sqlCmd2.CommandText = string.Format("SELECT COLUMN_NAME AS MyColumn FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName" AND SHOW = @Show);
sqlCmd2.Parameters.Add("@TableName", SqlDbType.NVarChar).Value = "registrant";
//sqlCmd2.Parameters.Add("@Show", SqlDbType.NVarChar).Value = "show";
sqlCmd2.ExecuteNonQuery();
using (SqlDataReader sqlReader = sqlCmd2.ExecuteReader())
{
while (sqlReader.Read())
{
DataRow tableRow = table.NewRow();
tableRow["MyColumn"] = sqlReader["MyColumn"].ToString();
table.Rows.Add(tableRow);
}
Repeater1.DataSource = table;
Repeater1.DataBind();
}
sqlConn2.Close();
}
}
}
我想要的方式来显示根据事件的正确列。例如,如果事件是5,则显示名字,姓氏和地址。我想在我的数据库本身中实现这一点,而不是通过我的C#代码,因为这将是一个大型的Web应用程序,当所有完成。我想也许是某种触发器,但我是数据库新手,并不完全确定。我正在使用SQL Server Management Studio。在我的C#代码中,我找出了2行,可以在我找出问题的数据库结构后使用。
使用存储的特效或视图s来控制输出。 – Greg