2011-06-08 181 views
1

我在顯示數據庫中的數據時遇到了問題。我在我的表6列(EmpName,的EmpID,AdminCode,實踐時間,FTE),我想顯示的數據如下在asp.net中以垂直方式顯示數據和垂直顯示

 
blankArea  blankArea blankarea  P1(PracticeName) P2    P3 
EmpName   EmpID  AdminCode  Hours FTE  Hours FTE  Hours FTE 

         
 
A 1 Insurance 0.14 0.03 0.00 0.00 0.00 0.00 A 1 AllDocs 0.19 0.04 0.00 0.00 0.00 0.00 B 2 Insurance 0.52 0.11 1.18 0.25 0.00 0.00 B 2 Payments 1.18 0.35 0.00 0.00 0.00 0.00 C 3 Payments 1.31 0.00 0.00 0.00 0.00 0.00

這意味着所有的細節都在我的表實踐的名字也列在表我使用sql server 2005.我如何以上述格式顯示我的數據。練習名稱將水平顯示,並自動生成兩列,並使用數據庫中存在的小時和FTE列數據填充這些列。 中繼器或數據專家適合於此。如果是,那麼如何。你有沒有關於這個的任何代碼。請幫忙。

在此先感謝

回答

0

我會用一個GridView和它的RowCreated事件產生頭中的額外的行:

ASPX:

<asp:GridView ID="GridView1" runat="server" OnRowCreated="GridView1_RowCreated" ></asp:GridView> 

代碼隱藏(VB.Net):

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not IsPostBack Then 
     'fake data 
     Dim tbl As New DataTable 
     tbl.Columns.Add(New DataColumn("EmpName", GetType(String))) 
     tbl.Columns.Add(New DataColumn("EmpID", GetType(String))) 
     tbl.Columns.Add(New DataColumn("AdminCode", GetType(String))) 
     tbl.Columns.Add(New DataColumn("P1Hours", GetType(String))) 
     tbl.Columns.Add(New DataColumn("P1FTE", GetType(String))) 
     tbl.Columns.Add(New DataColumn("P2Hours", GetType(String))) 
     tbl.Columns.Add(New DataColumn("P2FTE", GetType(String))) 
     tbl.Columns.Add(New DataColumn("P3Hours", GetType(String))) 
     tbl.Columns.Add(New DataColumn("P3FTE", GetType(String))) 
     For i As Int32 = 1 To 100 
      Dim newRow = tbl.NewRow 
      newRow("EmpName") = "EmpName" & i 
      newRow("EmpID") = "EmpID" & i 
      newRow("AdminCode") = "AdminCode" & i 
      newRow("P1Hours") = "P1Hours" & i 
      newRow("P1FTE") = "P1FTE" & i 
      newRow("P2Hours") = "P2Hours" & i 
      newRow("P2FTE") = "P2FTE" & i 
      newRow("P3Hours") = "P3Hours" & i 
      newRow("P3FTE") = "P3FTE" & i 
      tbl.Rows.Add(newRow) 
     Next 
     Me.GridView1.DataSource = tbl 
     Me.GridView1.DataBind() 
    End If 
End Sub 

Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs) 
    If e.Row.RowType = DataControlRowType.Header Then 
     'Build own custom header. 
     Dim grid As GridView = DirectCast(sender, GridView) 
     Dim newHeaderRow As New GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert) 
     Dim oTableCell As New TableCell() 

     'Add empty cell 
     newHeaderRow.Cells.Add(oTableCell) 

     'Add empty cell 
     oTableCell = New TableCell() 
     newHeaderRow.Cells.Add(oTableCell) 

     'Add empty cell 
     oTableCell = New TableCell() 
     newHeaderRow.Cells.Add(oTableCell) 

     'Add P1(PracticeName)-Cell 
     oTableCell = New TableCell() 
     oTableCell.Text = "P1(PracticeName)" 
     oTableCell.ColumnSpan = 2 
     oTableCell.Font.Bold = True 
     oTableCell.HorizontalAlign = HorizontalAlign.Center 
     newHeaderRow.Cells.Add(oTableCell) 

     'Add P2-Cell 
     oTableCell = New TableCell() 
     oTableCell.Text = "P2" 
     oTableCell.ColumnSpan = 2 
     oTableCell.Font.Bold = True 
     oTableCell.HorizontalAlign = HorizontalAlign.Center 
     newHeaderRow.Cells.Add(oTableCell) 

     'Add P3-Cell 
     oTableCell = New TableCell() 
     oTableCell.Text = "P3" 
     oTableCell.ColumnSpan = 2 
     oTableCell.Font.Bold = True 
     oTableCell.HorizontalAlign = HorizontalAlign.Center 
     newHeaderRow.Cells.Add(oTableCell) 
     grid.Controls(0).Controls.AddAt(0, newHeaderRow) 
    End If 
End Sub 

如果你需要C#,你可以將它轉換成here

這是結果:

image of the resulting GridView

0

,在我的腦海裏彈出的第一件事就是讓:

  • 一個全球性的GridView有:EmpName,的EmpID,AdminCode,實踐中所顯示的
  • 一箇中繼器實踐全局gridview的itemtemplate。
  • 另一個gridview與一個實踐的細節,這個gridview將在中繼器,因此爲每一個練習重複。

這就是我應該做的,也許有一個更簡單的方法不確定。 希望這會讓你走上正軌。