2011-06-08 97 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将在中继器,因此为每一个练习重复。

这就是我应该做的,也许有一个更简单的方法不确定。 希望这会让你走上正轨。