2010年11月24日 星期三

在GridView裡合併儲存格

GridView裡合併相同內容的儲存格,是常有的需求。
以下的範例可選擇多個需要合併的欄位:(在PreRender事件裡處理)

protected void gv_PreRender(object sender, EventArgs e)
{
int[] mergeColumns = { 0 }; //要合併的欄位-編號(款)

foreach (int mergeColumn in mergeColumns)
{
int i = 1;

// 取得來源GridView
GridView gv = (GridView)sender;

if (gv!= null)
{
foreach (GridViewRow row in gv.Rows)
{
row.Cells[mergeColumn].RowSpan = 0;

if (row.RowIndex != 0)
{
if (row.Cells[mergeColumn].Text.Trim() == gv.Rows[(row.RowIndex - i)].Cells[mergeColumn].Text.Trim())
{
gv.Rows[(row.RowIndex - i)].Cells[mergeColumn].RowSpan += 1;
row.Cells[mergeColumn].Visible = false;
i += 1;
}
else
{
row.Cells[mergeColumn].RowSpan += 1;
i = 1;
}
}
else
{
row.Cells[mergeColumn].RowSpan = 1;
}
}
}
}
}

2010年11月23日 星期二

由xml到table

SQL 2005提供xml的支援,其中包括xml的data type,使用範例如下:

DECLARE @xml xml
SET @xml = N'<polist>
<po><ponumber>100</ponumber><podate>2008-09-10</podate></po>
<po><ponumber>101</ponumber><podate>2008-09-11</podate></po>
</polist>'
SELECT
doc.col.value('ponumber[1]', 'nvarchar(10)') ponumber
,doc.col.value('podate[1]', 'datetime') podate
,doc.col.value('poxml[1]', 'nvarchar(4000)') poxml
FROM @xml.nodes('/polist/po') doc(col)


只要再加入insert語法,就可以從xml參數理讀取資料,存到資料表了。

2010年9月28日 星期二