2015-11-12 65 views
0

所有的信息都在下面,但主要想法是这样的: 我希望能够根据事件编号在我的中继器控制中显示或隐藏列。例如,事件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行,可以在我找出问题的数据库结构后使用。

+0

使用存储的特效或视图s来控制输出。 – Greg

回答

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 

如果你想将列添加到数据中继控制使用此查询的结果来决定是否