我已经看过这篇文章http://asp.net-informations.com/gridview/newrow.htm和这篇帖子http://forums.asp.net/p/1534978/3725419.aspx#3725419并且我已经完成了它,因为这个分隔符行可以与jquery折叠并且它在显示中工作得很好模式。当尝试用gridview做其他事情时出现的问题,因为有一个奇怪的行为..我添加了一个简单的按钮,只需在每个gridview行中设置一个radiobutton(除了新添加的GroupHeaders行)。然后,如果我添加了两个新行,他正在跳过设置GridView中的最后两行..
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);
}
}
打印每行旁边的行索引(只是为了检查它)我显示了这种情况(添加了两个GroupHeader行):
(索引是在他们用于GroupHeadrs行的gdDettaglio_RowCreated和其他行的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";
}
}
更新
在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;
}
但是我仍然需要在gridview上做一个foreach,更新数据库,关于可以尝试做什么的一些想法?在每一行中,我还有一个&#34;单行保存&#34; ImageButton,但在最后两行点击它没有触发RowCommand事件......就像两个添加的GroupHeader行正在推出最后两个数据行一样,无论索引如何。如果我单击显示的行上的ImageButton(使用Text =&#39;&lt;%#Container.DataItemIndex%&gt;&#39;)rowIndex 2,在rowCommand中它变为rowIndex 3,但它修改了右边行,我点击的那个..如果我在第7行做同样的事情,它会变成9 ..但是如果强迫它在rowIndex 11上得到值,那么你得到的是ArgumentOutOfRangeException,因为Rows.Count It& #39; s仍然是11 ..
答案 0 :(得分:0)
好的,现在我在GridView DataSource列表中添加了与GroupHeaders行一样多的空元素,因此GridView.Rows.Count足以获取所有行..