所有信息如下,但主要的想法是: 我希望能够根据事件编号显示或隐藏Repeater Control中的列。例如,事件5将显示某些列,如名称和地址,并隐藏其他列,如电话和电子邮件。我想我可以以某种方式分配1或0来记录应该使用或不使用哪些。使用Name的事件5将是51,而不是使用Phone将是50.如何实现这一点,不确定。
信息: 我正在为会议构建一个Web应用程序。将有管理员可以创建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,则显示FirstName,LastName和Address。我想在我的数据库本身实现这一点,而不是通过我的C#代码,因为这将是一个大的Web应用程序完成所有。我想可能是某种类型的触发器,但我是数据库新手并不完全确定。我正在使用SQL Server Management Studio。在我的C#代码中,我注释掉了两行,一旦我找出问题的数据库结构,就可以使用它。
答案 0 :(得分:0)
您可以创建一个单独的表来控制每列的列设置,这是一个示例表:
CREATE TABLE ColumnSettings
(
EventId int,
TableName nvarchar(50),
ColumnName nvarchar(50),
Visible bit
)
当您查询转发器控件的数据时,您还可以在此新表中查询设置:
select
ColumnName
from ColumnSettings
where EventId = @event_id
and TableName = @table_name
and Visible = 1
并使用此查询的结果来决定是否要将列添加到转发器控件的数据中