[英]Dynamically loading Gridview not displaying and data
我正在嘗試從Active Directory檢索的數據加載網格。 我將GridView設置如下。 問題是正在創建記錄,但未顯示數據
<asp:gridview ID="Gridview1" runat="server" ShowFooter="true" AutoGenerateColumns="false" AllowPaging="True" Visible="false"
BackColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" CellPadding="4"
style ="z-index: 2; left: 65px; top:355px; position: absolute; height: 221px; width: 1158px">
<Columns>
<asp:BoundField DataField="RowNumber" HeaderText="Row Number" />
<asp:TemplateField HeaderText="Employee No">
<ItemTemplate>
<asp:Label ID="EmployeeNo" runat="server" style="color:blue"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:Label ID="DisplayName" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Department">
<ItemTemplate>
<asp:Label ID="Department" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Job Title">
<ItemTemplate>
<asp:Label ID="JobTitle" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Manager">
<ItemTemplate>
<asp:Label ID="Manager" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Employee ID">
<ItemTemplate>
<asp:Label ID="Name" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:gridview>
我在收集活動數據之前運行以下功能
private void SetInitialRow()
{
DataTable dt = new DataTable();
DataRow dr = null;
dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
dt.Columns.Add(new DataColumn("EmployeeNo", typeof(string)));
dt.Columns.Add(new DataColumn("DisplayName", typeof(string)));
dt.Columns.Add(new DataColumn("Department", typeof(string)));
dt.Columns.Add(new DataColumn("JobTitle", typeof(string)));
dt.Columns.Add(new DataColumn("Manager", typeof(string)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));
dr = dt.NewRow();
dr["RowNumber"] = 1;
dr["EmployeeNo"] = string.Empty;
dr["DisplayName"] = string.Empty;
dr["Department"] = string.Empty;
dr["JobTitle"] = string.Empty;
dr["Manager"] = string.Empty;
dr["Name"] = string.Empty;
dt.Rows.Add(dr);
//dr = dt.NewRow();
//Store the DataTable in ViewState
ViewState["CurrentTable"] = dt;
Gridview1.DataSource = dt;
Gridview1.DataBind();
}
然后我這樣聲明我的數據表
SetInitialRow();
DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
DataRow drCurrentRow = null;
然后我遍歷活動數據記錄
for (int i = 0; i < MyVars.NoOfADRecords; i++)
{
Label empNo = (Label)Gridview1.Rows[i].Cells[1].FindControl("EmployeeNo");
Label displayName =(Label)Gridview1.Rows[i].Cells[2].FindControl("DisplayName");
Label dept =(Label)Gridview1.Rows[i].Cells[3].FindControl("Department");
Label jobTitle = (Label)Gridview1.Rows[i].Cells[1].FindControl("JobTitle");
Label manager = (Label)Gridview1.Rows[i].Cells[2].FindControl("Manager");
Label name = (Label)Gridview1.Rows[i].Cells[3].FindControl("Name");
drCurrentRow = dtCurrentTable.NewRow();
drCurrentRow["RowNumber"] = i;
empNo.Text = MyVars.ADEmployeeID[i];
displayName.Text = MyVars.ADName[i];
dept.Text = MyVars.ADDepartment[i];
jobTitle.Text = MyVars.ADJobtitle[i];
manager.Text = MyVars.ADManager[i];
name.Text = MyVars.ADName[i];
dtCurrentTable.Rows[i]["EmployeeNo"] = empNo.Text;
dtCurrentTable.Rows[i]["DisplayName"] = displayName.Text;
dtCurrentTable.Rows[i]["Department"] = dept.Text;
dtCurrentTable.Rows[i]["JobTitle"] = jobTitle.Text;
dtCurrentTable.Rows[i]["Manager"] = manager.Text;
dtCurrentTable.Rows[i]["Name"] = name.Text;
dtCurrentTable.Rows.Add(drCurrentRow);
ViewState["CurrentTable"] = dtCurrentTable;
}
現在,如果我將i替換為0,它會在第一個循環上崩潰
(Label)Gridview1.Rows[0].Cells[1].FindControl("EmployeeNo");
它可以工作,但是盡管所有記錄都顯示沒有數據。 當我調試empNo.text等代碼時,它們都具有值,那么我在做什么錯呢?
您正在將空行添加到數據表中。 替換下面的代碼以將行添加到數據表中
drCurrentRow["EmployeeNo"] = empNo.Text;
drCurrentRow["DisplayName"] = displayName.Text;
drCurrentRow["Department"] = dept.Text;
drCurrentRow["JobTitle"] = jobTitle.Text;
drCurrentRow["Manager"] = manager.Text;
drCurrentRow["Name"] = name.Text;
dtCurrentTable.Rows.Add(drCurrentRow);
ViewState["CurrentTable"] = dtCurrentTable;
代替你的代碼
dtCurrentTable.Rows[i]["EmployeeNo"] = empNo.Text;
dtCurrentTable.Rows[i]["DisplayName"] = displayName.Text;
dtCurrentTable.Rows[i]["Department"] = dept.Text;
dtCurrentTable.Rows[i]["JobTitle"] = jobTitle.Text;
dtCurrentTable.Rows[i]["Manager"] = manager.Text;
dtCurrentTable.Rows[i]["Name"] = name.Text;
dtCurrentTable.Rows.Add(drCurrentRow);
ViewState["CurrentTable"] = dtCurrentTable;
您正在SetInitialRow
方法中綁定數據SetInitialRow
。 當您綁定到那里時,它僅將一個空行添加到GridView。 您應該在循環之后進行數據綁定以獲取所有用戶...
其次,您嘗試在GridView中找到沒有控件的控件,然后將其MyVars.NoOfADRecords
為Label
,從MyVars.NoOfADRecords
設置Label文本並將其添加到DataTable中。 最好像下面的代碼片段一樣將值直接添加到DataTable中。
for (int i = 0; i < MyVars.NoOfADRecords; i++)
{
drCurrentRow["EmployeeNo"] = MyVars.ADEmployeeID[i];
drCurrentRow["DisplayName"] = MyVars.ADName[i];
dtCurrentTable.Rows.Add(drCurrentRow);
}
Gridview1.DataSource = dtCurrentTable;
Gridview1.DataBind();
ViewState["CurrentTable"] = dtCurrentTable;
但是您想要擺脫很多不必要的代碼,只需執行以下操作:
Gridview1.DataSource = MyVars.NoOfADRecords;
Gridview1.DataBind();
<ItemTemplate>
<%# Eval("EmployeeNo") %>
</ItemTemplate>
我認為您的問題可能僅僅是因為您過早調用GridView1.DataBind()。 在將所有行添加到dtCurrentTable之后,嘗試最后調用GridView1.DataBind()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.