2017-03-03 52 views
0

我想从从Active Directory检索到的数据加载网格。我已经列出了如下的GridView。问题是正在创建的记录,但该数据没有显示动态加载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(); 
    } 

然后我宣布我的DataTable这样

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; 
} 

因为它是现在它崩溃的第一个循环,如果我以0代替我喜欢这个

(Label)Gridview1.Rows[0].Cells[1].FindControl("EmployeeNo"); 

它的工作原理,但尽管所有的记录显示没有数据。当我在调试empNo.text等代码的时候,所有的都有值,所以我做错了什么?

回答

0

我认为你的问题可能只是您呼叫GridView1.DataBind()太早。尝试调用GridView1.DataBind()最后,完成将所有行添加到dtCurrentTable后。

+0

谢谢乔,你和其他答案都是正确的,非常有帮助。 – user616076

0

您正在将空行添加到数据表中。替换下面的代码行添加到数据表

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; 
0

你要绑定在SetInitialRow方法的数据表。当你在那里绑定时,它只会将一个空行添加到GridView中。 你应该做的绑定循环让所有的用户之后...

第二你试图找到在GridView那里有没有控制,然后转换为Label,从MyVars.NoOfADRecords设置标签的文本,并添加到那些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>