我看過這篇文章http://asp.net-informations.com/gridview/newrow.htm和這篇文章http://forums.asp.net/p/1534978/3725419.aspx#3725419我已經做了這樣的分隔行可以與jquery摺疊,它在顯示模式下工作得很好。當嘗試使用gridview做其他事情時發生的問題,因爲有一個奇怪的行爲..我添加了一個簡單的按鈕,只需在每個gridview行中設置一個單選按鈕(除了在新添加的GroupHeaders行中)。然後,如果我已經添加了兩個新的排他跳過在GridView設置的最後兩行..以編程方式添加新行時調整gridview rowIndex
public void AddNewRow(object sender, GridViewRowEventArgs e)
{
GridView GridView1 = (GridView)sender;
GridViewRow NewTotalRow = new GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
TableCell HeaderCell = new TableCell();
HeaderCell.Attributes.Add("onclick", "collapsible('" + rowgroup + "')");
NewTotalRow.Cells.Add(HeaderCell);
TableCell HeaderCellIndex = new TableCell();
int indexCorrente = e.Row.RowIndex + index;
HeaderCellIndex.Text = indexCorrente.ToString();
NewTotalRow.Cells.Add(HeaderCellIndex);
GridView1.Controls[0].Controls.Add(NewTotalRow);
}
protected void gdDettaglio_RowCreated(object sender, GridViewRowEventArgs e)
{
bool newRow = false;
if ((DataBinder.Eval(e.Row.DataItem, "Stato") != null))
{
if (statoCorrente != Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "Stato").ToString()))
newRow = true;
}
if (newRow)
{
AddNewRow(sender, e);
}
}
打印行索引(只是爲了檢查)旁邊,我顯示此情況下,每一行(用2個頁眉行補充):
(該指數是因爲它們在按鈕代碼打印它們在gdDettaglio_RowCreated爲GroupHeadrs行和gdDettaglio_OnDataBound爲其他行)
-----------------------------------------
| HEADER |
|---------------------------------------|
-----------------------------------------
| Gruppo 1 | index -1 |
|---------------------------------------|
| grp1 | x | blablabla | | index 0 |
| grp1 | y | blablabla | | index 1 |
| grp1 | z | blablabla | | index 2 |
| grp1 | x | blablabla | | index 3 |
| grp1 | x | blablabla | | index 4 |
|---------------------------------------|
| Gruppo 2 | index -1 |
|---------------------------------------|
| grp2 | x | blablabla | | index 5 |
| grp2 | y | blablabla | | index 6 |
| grp2 | z | blablabla | | index 7 |
| grp2 | z | blablabla | | index 8 |
| grp2 | z | blablabla | | index 9 |
| grp2 | z | blablabla | | index 10 |
-----------------------------------------
我剛:
foreach (GridViewRow riga in gdDettaglio.Rows)
{
if (riga.RowType == DataControlRowType.DataRow)
{
RadioButtonList rad = (RadioButtonList)riga.FindControl("rad");
rad.SelectedValue = "True";
}
}
UPDATE:
做jQuery的工作同樣的事情,它會影響所有的行:
function accettaTutte() {
$("#<%=gdDettaglio.ClientID%> tr:has(td)").each(function() {
var items = $(this).find("[id$='radDaPa'] input:radio'");
for (var i = 0; i < items.length; i++) {
if (items[i].value == 'True') {
if (!(items[i].checked)) {
items[i].checked = true;
}
break;
}
}
});
return false;
}
但我仍然需要做一個foreach上的GridView,更新數據庫,關於可以嘗試做什麼的一些想法?在每一行上,我還有一個「單行保存」ImageButton,但在最後兩行上單擊它並不會觸發RowCommand事件......就像兩個添加的GroupHeader行正在推出最後兩行數據,關於索引的問題..如果我單擊顯示的行上的ImageButton(使用Text ='<%#Container.DataItemIndex%>')rowIndex 2,在rowCommand它成爲rowIndex 3,但它修改了右行,一個我點擊了..如果我在第7行做同樣的事情,它變成了9 ..但是如果強迫它獲得rowIndex 11的值,那麼你會得到ArgumentOutOfRangeException,因爲Rows.Count它仍然是11 ..
爲什麼不只是兩個GridViews?如果他們是兩個不同頭部的不同組合,那麼將它們可視化地分割也是有意義的。 – DatRid 2014-10-22 10:31:34
好點,但我只展示了兩個小組來簡化,實際上我有5個不同的小組。他們有不同的標題(只是爲了標識它們並具有可摺疊的功能),但同樣的17列(它們有一個獨特的在頂部共同的頭),所以我更喜歡使用相同的GridView,如果可能的話。 – MisterFrank 2014-10-22 10:37:07
爲什麼你有索引1和7兩次?你需要知道GroupHeaders在哪裏? – DatRid 2014-10-22 11:00:44