以编程方式添加新行时调整gridview rowIndex

时间:2014-10-22 10:23:27

标签: c# asp.net gridview indexing

我已经看过这篇文章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 ..

1 个答案:

答案 0 :(得分:0)

好的,现在我在GridView DataSource列表中添加了与GroupHeaders行一样多的空元素,因此GridView.Rows.Count足以获取所有行..