我正在嘗試在我的頁面上顯示網格,並且每次網格更改中的名稱都顯示該名稱的Total。但是,我不斷收到一個錯誤Object not set to instance of an object
這是我的語法,我正在嘗試,有人可以看看,並填補我在做什麼錯了嗎?顯示網格中的總行數每次更改名稱
<asp:GridView ID="gvTest" runat="server" OnDataBound = "gvODB" OnRowCreated = "gvORC" >
<Columns>
<asp:BoundField DataField="" HeaderText="userID"></asp:BoundField>
<asp:BoundField DataField="employeename" HeaderText="Name"></asp:BoundField>
<asp:BoundField DataField="hoursworked" HeaderText="Daily Hours"></asp:BoundField>
</Columns>
</asp:GridView>
private int currentId = 0;
private decimal subTotal = 0;
private decimal total = 0;
private int subTotalRowIndex = 0;
protected void gvORC(object sender, GridViewRowEventArgs e)
{
DataTable dt = new DataTable();
subTotal = 0;
try
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
dt = (e.Row.DataItem as DataRowView).DataView.Table;
int userID = Convert.ToInt32(dt.Rows[e.Row.RowIndex]["userID"]);
total += Convert.ToDecimal(dt.Rows[e.Row.RowIndex]["hoursworked"]);
if (userID != currentId)
{
if (e.Row.RowIndex > 0)
{
for (int i = subTotalRowIndex; i < e.Row.RowIndex; i++)
{
subTotal += Convert.ToDecimal(gvTest.Rows[i].Cells[2].Text);
}
this.AddTotalRow("Total", subTotal.ToString("N2"));
subTotalRowIndex = e.Row.RowIndex;
}
currentId = userID;
}
}
}
catch (Exception exception)
{
throw exception;
}
}
protected void AddTotalRow(string labelText, string value)
{
GridViewRow row = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Normal);
row.BackColor = ColorTranslator.FromHtml("#F9F9F9");
row.Cells.AddRange(new TableCell[3] { new TableCell(), //Empty Cell
new TableCell { Text = labelText, HorizontalAlign = HorizontalAlign.Right},
new TableCell { Text = value, HorizontalAlign = HorizontalAlign.Right } });
gvTest.Controls[0].Controls.Add(row);
}
編輯 - 網格將返回一個用戶名,用戶名和工作小時數。我希望爲每個返回的個人用戶名顯示總計。像這樣 用戶ID名字小時 1646紅16 1646紅8 共有24 1812藍6 1812藍8 共14
現在一個用戶ID,姓名和時間總是會回來,唯一的一次空將所有結果添加到網格時返回值。
沒有人可以用你提供的信息寫出一個好的答案,但是一般而言,你的Exception幾乎可以肯定是你通過索引訪問一個項目的一個或多個地方,然後在不進行任何空檢查的情況下訪問一個屬性。另外,你是否知道頁腳模板? – Crowcoder
這個問題缺乏上下文讓我確切地知道「每當網格中的名稱發生變化」的含義。也許頁腳模板在這裏不合適。爲了檢查null,只需簡單地測試'if(x == null)'。因此,例如,檢查gvTest是否爲空,然後測試gvTest.Rows是否爲空,然後測試gvTest.Rows [I]是否爲空,然後測試gvTest.Rows [I] .Cells是否爲null等。 – Crowcoder
@Crowcoder - 看我的編輯,這有助於澄清? – user5382234