我有一張桌子,裏面有醫生辦公室和那些辦公室裏的醫生,我正在接受中繼控制。返回的數據不會彙總。所以,如果一個辦公室裏有兩個醫生,那麼有兩排,同一個辦公室,不同的醫生。轉發器控制來彙總數據?
是否有一種方法來聚合數據,以便中繼器顯示來自該辦公室的所有醫生的1個辦公室,這樣我就可以避免重複?
我有一張桌子,裏面有醫生辦公室和那些辦公室裏的醫生,我正在接受中繼控制。返回的數據不會彙總。所以,如果一個辦公室裏有兩個醫生,那麼有兩排,同一個辦公室,不同的醫生。轉發器控制來彙總數據?
是否有一種方法來聚合數據,以便中繼器顯示來自該辦公室的所有醫生的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();
}
我認爲你最好在數據庫中進行聚合。
我正在考慮,但認爲可能有更好的方法來做到這一點。
如果在數據庫中聚合,傳遞一個delimeted列並在數據綁定過程中解析它?
使用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員工的名單。你也可以爲醫生做這個
只是要清楚,你想顯示辦公室的文檔數量可用或類似的東西office1 doc1 doc2 doc3類似的東西? – Perpetualcoder 2008-12-15 17:16:26