2013-03-07 167 views
0

我有一個名爲dayList的列表,其中有12個日期。我想把這個列表綁定到一個GridView列。如何將GridView列綁定到列表?

GridView2.DataSource = dayList; 

     GridView2.DataBind(); 

     for (int i = 0; i < dayList.Count; i++) 
     { 
      Label lbldate = (Label)GridView2.Rows[i].FindControl("lblgriddate"); 
      lbldate.Text = Convert.ToString(dayList[i]); 
     } 
    } 

我越來越對象引用未設置爲一個對象錯誤的實例:

lbldate.Text = Convert.ToString(dayList[i]);

是因爲有在GridView沒有行?但不應該GridView自動添加行,就像我們綁定GridView列與DataTable一樣?

回答

0

您正試圖訪問那些甚至不存在的GridView行。

你爲什麼要綁定一個gridView的單列?

你應該做這兩種的:

  1. 直接綁定您的gridViewdayList

    GridView2.AutoGenerateColumns=true; 
    GridView2.DataSource = dayList; 
    GridView2.DataBind(); 
    
  2. 綁定你的GridView的備用數據源有ATLEAST的12行,使你的GridView確實有行,然後使用你的DayList中的值更新其中的一列RowDataBound或緊接着(dataBinding你的Grid),即

    for (int i = 0; i < dayList.Count; i++) 
    { 
        Label lbldate = (Label)GridView2.Rows[i].FindControl("lblgriddate"); 
        lbldate.Text = Convert.ToString(dayList[i]); 
    } 
    

內的RowDataBound

protected void Review_grid_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      e.Row.Cells[2].Text = DayList[e.Row.RowIndex]; 

     } 
    } 

它應該給你一個想法:

你也可以隱蔽您的收藏DayListGridViewRow收集,並將其添加到GridViewControls。見ref

+0

我可以根據列表中的元素數量動態地添加行到網格?因爲列表中元素的數量可能會有所不同。 – Arbaaz 2013-03-07 13:02:22

+1

不,您不能直接將行添加到GridView。你可以創建一個DataTable並將行添加到迭代列表中,然後將該DataTable綁定到GridView。但是在那種情況下,爲什麼不直接綁定你的DayList到GridView ??。你可以控制headerText,格式化和什麼不是 – 2013-03-07 13:05:28

+0

對! 「創建一個DataTable並將行添加到迭代列表中,然後將該DataTable綁定到GridView。」挽救了一天。 – Arbaaz 2013-03-08 11:06:14

1

正如@ manish-mishra所說,你爲什麼要這麼做?只要有以下就足夠了:如果你想設置你的lblgriddate控件的文本

GridView2.DataSource = dayList; 
GridView2.DataBind(); 

,你應該把它綁定到你的rowtemplate的DataItem

 var dayList = new List<DateTime>() { 
      DateTime.Today, 
      DateTime.Today.AddDays(-1), 
      DateTime.Today.AddDays(-2) 
     }; 
     GridView2.DataSource = dayList; 
     GridView2.DataBind(); 

而對於HTML:

<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="false"> 
     <Columns> 
      <asp:TemplateField HeaderText="Date"> 
       <ItemTemplate> 
        <asp:Label ID="lblgriddate" Text="<%# Container.DataItem %>" runat="server" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

我加入以下代碼DataBind()電話後,這也適用。儘管如此,它並沒有改變。由於標籤本身已經是數據綁定的值,因此您不必在代碼中明確地綁定它。

 for (int i = 0; i < dayList.Count; i++) 
     { 
      Label lbldate = (Label)GridView2.Rows[i].FindControl("lblgriddate"); 
      lbldate.Text = Convert.ToString(dayList[i]); 
     } 
+0

關於'它不是GridView行的子節點,它是特定單元格的子節點,'......沒有Willem,他得到這個錯誤是因爲沒有行,如果有足夠的行數,那就是代碼他將不得不寫信給查找控制。 – 2013-03-07 13:09:35

+0

我站在FindControl位糾正,我剛做了一個示例應用程序來測試,它確實找到了標籤控件。但是它也表明for-loop也可以工作。 – 2013-03-07 13:16:20

0

創建一個新的DataGridViewRow對象abd,然後將您的項目從您的列表添加到行。完成後將這一行添加到您的gridview。這將做你正在嘗試做什麼