Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以编程方式添加新行时调整gridview行索引_C#_Asp.net_Gridview_Indexing - Fatal编程技术网

C# 以编程方式添加新行时调整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)

我看过这篇文章和这篇文章,我用jquery折叠了分隔行,它在显示模式下工作得很好。尝试使用gridview执行其他操作时出现的问题,因为存在一种奇怪的行为。。我添加了一个简单的按钮,只需设置一个radiobutton,该按钮位于除新添加的GroupHeaders行之外的每个gridview行中。然后,如果我添加了两个新行,他将跳过设置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_行和为其他行创建的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的正确位置。。