2011-12-24 13 views
0

私は巨大なデータベースを持つWebアプリケーションを開発しています。HiddenFieldの各値のテーブルを生成する方法は?

グループ表:グループID、GroupNameの

コース表:CourseID、CourseName、グループID

ユーザー表:ユーザー名、名前、仕事

User_Course私は、データベース内の次のテーブルを持っています表:ユーザー名、CourseID

最初の属性は、最後の表を除く各表の主キーです。

ここでは、GroupIDの値に基づいてコースの種類ごとにテーブルを作成しようとしています。私はコースの3つのグループを持っています。私はHtmlTableに使用しているPlaceHolderを使用しています。私はGridViewのような他のコントロールではできない多くの複雑なことがあるので、柔軟性のためにこのメソッドを使いました。

とにかく、私はテーブルを作成することができ、すべて正常に動作します。ここでは、HiddenFieldであるGroupIDの値に基づいて、各グループのテーブルを生成したいと考えています。

マイコード:

<asp:PlaceHolder ID="PlaceHolder1" runat="server" />  
    <asp:HiddenField ID="HiddenField1" runat="server" Value="1" /> 
    <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>" SelectCommandType="StoredProcedure" SelectCommand="kbiReport">  
    <SelectParameters> 
     <%--ControlParameter is linked to the HiddenField above to generate different GridView based on different values of GroupID--%> 
     <%--<asp:Parameter Name="GroupID" DefaultValue="3" />--%> 
     <asp:ControlParameter ControlID="HiddenField1" Name="GroupID" PropertyName="Value" /> 
    </SelectParameters> 
</asp:SqlDataSource> 
<asp:Button ID="updateButton" runat="server" OnClick="updateButton_Click" Text="Update" /> 

と私のコードビハインド:

//create a new HtmlTable object 
HtmlTable table = new HtmlTable(); 

DataView dv = (DataView)SqlDataSource2.Select(DataSourceSelectArguments.Empty); 
int columns = dv.Table.Columns.Count; 
int rows = dv.Count; 

//table's formating-related properties 
table.Border = 2; 
table.CellPadding = 3; 
table.CellSpacing = 3; 

//to get the css style 
table.Attributes["class"] = "mGrid"; 

//create a new HtmlTableRow and HtmlTableCell objects 
HtmlTableRow row; 
HtmlTableRow header = new HtmlTableRow(); 
HtmlTableCell cell; 

foreach (DataColumn column in dv.Table.Columns) 
{ 
    HtmlTableCell headerCell = new HtmlTableCell("th"); 
    headerCell.InnerText = column.Caption; 
    header.Cells.Add(headerCell); 
} 
table.Rows.Add(header); 

//loop for adding 5 rows to the table 
foreach (DataRowView datarow in dv) 
{ 
    row = new HtmlTableRow(); 
    row.BgColor = "yellow"; 

    for (int j = 0; j < columns; j++) 
    { 
     cell = new HtmlTableCell(); 
     if (j < 4) 
     { 
      cell.InnerText = datarow[j].ToString(); 
     } 
     else 
     { 
      CheckBox checkbox = new CheckBox(); 

      int checkBoxColumns = dv.Table.Columns.Count - 5; 
      string fieldvalue = datarow[j].ToString(); 
      string yes = fieldvalue.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries)[1]; 
      string courseid = fieldvalue.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries)[0]; 
      checkbox.ID = row.Cells[3].InnerText + "," + courseid.Trim(); 
      checkbox.Checked = yes.Equals("Yes"); 
      cell.Controls.Add(checkbox); 
     } 

     //add the cell to the current row 
     row.Cells.Add(cell); 
    } 

    //add the row to the table 
    table.Rows.Add(row); 
} 

//add the table to the page 
PlaceHolder1.Controls.Add(table); 

私は上記のコードは、ループ内でなければならないことを知っているが、私はどのようにこのループを思い付くしませんでした。

+0

は* *繰り返し質問を投稿しないでください。 – casperOne

答えて

1

SqlDataSourceの結果をコードビハインドで使用しないでください。制御側のデータバインディングのために残しておきます。

代わり

使用純粋なADO.NETオブジェクト:のSqlConnection、SqlCommandオブジェクト、SqlDataReaderの、例えば:

using (SqlConnection connection = new SqlConnection(connectionString)) 
using (SqlCommand command = connection.CreateCommand()) 
{ 
    command.CommandText = commandText; 

    connection.Open(); 
    using (SqlDataReader reader = command.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      int id = (int)reader["ID"]; 
     } 
    } 
} 
+0

私は新しいASP.NET開発者です。私はすでに多くの概念を持っており、他の概念に進む前にそれらを利用したいと思います。 SqlDataSourceでどのように使用するか教えてください。 – user1093651

+0

@ユーザー:私は私の答えを更新しました。 – abatishchev

+3

@ユーザ: 'GridView'や' DetailsView'の使い方を学んでください。彼らはあなたのためのデータバインドされたテーブルを構築します。 – abatishchev