C# 以编程方式添加新行时调整gridview行索引
我看过这篇文章和这篇文章,我用jquery折叠了分隔行,它在显示模式下工作得很好。尝试使用gridview执行其他操作时出现的问题,因为存在一种奇怪的行为。。我添加了一个简单的按钮,只需设置一个radiobutton,该按钮位于除新添加的GroupHeaders行之外的每个gridview行中。然后,如果我添加了两个新行,他将跳过设置GridView中的最后两行C# 以编程方式添加新行时调整gridview行索引,c#,asp.net,gridview,indexing,C#,Asp.net,Gridview,Indexing,我看过这篇文章和这篇文章,我用jquery折叠了分隔行,它在显示模式下工作得很好。尝试使用gridview执行其他操作时出现的问题,因为存在一种奇怪的行为。。我添加了一个简单的按钮,只需设置一个radiobutton,该按钮位于除新添加的GroupHeaders行之外的每个gridview行中。然后,如果我添加了两个新行,他将跳过设置GridView中的最后两行 public void AddNewRow(object sender, GridViewRowEventArgs e)
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_行和为其他行创建的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,来更新db,一些关于可以尝试做什么的想法?在每一行上,我都有一个单行SaveImageButton,但在最后两行单击它时,它不会触发RowCommand事件。。。这就像添加的两个GroupHeader行正在推出最后两个数据行,而与索引无关。。如果我在显示为使用Text=rowdex2的行上单击ImageButton,则在rowCommand中它将变为rowdex3,但它修改了我单击的右侧行。。如果我在第7行做同样的操作,它将变为9。。但是如果强制它在rowIndex 11上获取值,那么您将获取ArgumentOutOfRangeException,因为Rows.Count仍然是11..好的,现在我将向GridView数据源列表添加与GroupHeaders行一样多的空元素,因此GridView.Rows.Count足以获取所有行 为什么不干脆两个GridView?如果他们是两个不同的组,有不同的标题,那么在视觉上对他们进行分割也是有意义的,我想说的很好,但我只展示了两个组来简化,实际上我有5个不同的组。。它们有不同的标题,只是为了识别它们并具有可折叠功能,但是相同的17列,它们的顶部有一个共同的唯一标题,所以我更喜欢使用相同的GridView,如果可能的话..为什么索引1和7有两次?您需要知道GroupHeaders的正确位置吗?因为我按照我在那篇文章的链接中看到的方式将rowIndex分配给GroupHeaders,在当前rowIndex中添加了一个不断增加的变量。。因此,它开始处理第0行,索引为1,该行属于第一组,数据集按组排序,因此0+index1=1,索引为++。然后它到达第5行,它看到正在更改组,然后它添加另一个GroupHeader并为其分配5+index2=7。我不知道为什么,但如果我修改这种方式,将索引分配给GroupHeaders,它将不会在网格上以正确的顺序显示在自己的组的顶部..你是对的,使用Add而不是AddAt使索引与位置不相关,所以现在我使用-1,仍然有GroupHeaders的正确位置。。