2014-10-22 45 views
0

我看過這篇文章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 ..

+0

爲什麼不只是兩個GridViews?如果他們是兩個不同頭部的不同組合,那麼將它們可視化地分割也是有意義的。 – DatRid 2014-10-22 10:31:34

+0

好點,但我只展示了兩個小組來簡化,實際上我有5個不同的小組。他們有不同的標題(只是爲了標識它們並具有可摺疊的功能),但同樣的17列(它們有一個獨特的在頂部共同的頭),所以我更喜歡使用相同的GridView,如果可能的話。 – MisterFrank 2014-10-22 10:37:07

+0

爲什麼你有索引1和7兩次?你需要知道GroupHeaders在哪裏? – DatRid 2014-10-22 11:00:44

回答

0

好吧,現在我添加到GridView DataSource列表中的許多空元素和GroupHeaders行一樣,因此GridView.Rows.Count足以獲得所有行。

相關問題