2017-03-03 62 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>