2008-12-15 50 views
0

我有一張桌子,裏面有醫生辦公室和那些辦公室裏的醫生,我正在接受中繼控制。返回的數據不會彙總。所以,如果一個辦公室裏有兩個醫生,那麼有兩排,同一個辦公室,不同的醫生。轉發器控制來彙總數據?

是否有一種方法來聚合數據,以便中繼器顯示來自該辦公室的所有醫生的1個辦公室,這樣我就可以避免重複?

+0

只是要清楚,你想顯示辦公室的文檔數量可用或類似的東西office1 doc1 doc2 doc3類似的東西? – Perpetualcoder 2008-12-15 17:16:26

回答

1

在你的ASPX標記:

<table><tr><th>Office</th><th>Doctors</th></tr> 
<asp:repeater id="Repeater" runat="server" OnItemDataBound="NextItem" ... > 
    <ItemTemplate><asp:Literal id="RepeaterRow" runat="server" /> 
    </ItemTemplate> 
</asp:repeater> 
<asp:Literal id="LastRow" runat="server" /> 
</table> 

在後面的代碼:

public class Office 
{ 
    public string OfficeName {get;set;}; 
    List<string> _doctors = new List<string>(); 
    public List<string> Doctors {get{ return _doctors; } }; 

    void Clear() 
    { 
     OfficeName = ""; 
     _doctors.Clear(); 
    } 

    public override string ToString() 
    { 
     StringBuilder result = new StringBuilder("<tr>"); 

     result.AppendFormat("<td>{0}</td>", OfficeName); 

     string delimiter = ""; 
     result.Append("<td>"); 
     foreach(string doctor in Doctors) 
     { 
      result.Append(doctor).Append(delimiter); 
      delimiter = "<br/>"; 
     } 

     result.Append("</td></tr>"); 

     return result.ToString(); 
    } 
} 

private string CurOffice = ""; 
private Office CurRecord = new Office(); 

void NextItem(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) return; 

    Literal repeaterRow = e.Item.FindControl("RepeaterRow") as Literal; 
    if (repeaterRow == null) return; 

    DataRow row = ((DataRowView)e.Item.DataItem).Row; 

    if (CurOffice != (string)row["Office"]) 
    { 
     repeaterRow.Text = CurRecord.ToString(); 
     repeaterRow.Visible = true; 

     CurRecord.Clear(); 
     CurOffice = row["Office"]; 
     CurRecord.Office = CurOffice; 
    } 
    else 
     e.Item.Visible = false; 

    CurRecord.Doctors.Add((string)row["doctor"]); 
} 

void Page_PreRender(object sender, EventArgs e) 
{ 
    LastRow.Text = CurRecord.ToString(); 
} 
0

我認爲你最好在數據庫中進行聚合。

0

我正在考慮,但認爲可能有更好的方法來做到這一點。

如果在數據庫中聚合,傳遞一個delimeted列並在數據綁定過程中解析它?

0

使用SQL COALESCE函數

由於從SQLTeam.com:

DECLARE @EmployeeList varchar(100) 

SELECT @EmployeeList = COALESCE(@EmployeeList + ', ', '') + 
     CAST(Emp_UniqueID AS varchar(5)) 
FROM SalesCallsEmployees 
WHERE SalCal_UniqueID = 1 

這將創建一個逗號delimeted員工的名單。你也可以爲醫生做這個