2014-05-16 34 views
0

我想讓用戶只能選擇他希望在gridview而不是表格的每一列上看到的數據。例如,我將每列顯示在一個複選框列表中。如果用戶只選擇名稱和地址並點擊提交,則在回發時,名稱和地址應顯示在gridview中。我有一切正常工作,除了gridview不顯示任何數據。Visual Studio 2012 - Gridview不在網絡表格上顯示

這裏是我的.aspx代碼:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AdminReport.aspx.cs" Inherits="WorkOrder.AdminReport" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 

    <link href="Style.css" rel="stylesheet" type="text/css" /> 
    <link href="msgBoxLight.css" rel="stylesheet" type="text/css" /> 
    <script src="Scripts/jquery-1.8.0.min.js" type="text/javascript"></script> 
    <script src="Scripts/jquery.msgBox.js" type="text/javascript"></script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Panel ID="Panel1" runat="server" Width="1020px"> 
      <asp:Image ID="Image1" runat="server" ImageUrl="~/Images/mast_left.png" />   
     </asp:Panel>  
     </div> 

     <div class="Section"> <hr /><h2> 
      Online Work Order Form - (Admin Report)</h2> 
     </div> 
     <br /> 
     <asp:Label ID="Label2" runat="server" Text="Select data you want to view and click the submit button:" CssClass="label"></asp:Label> 
     <br /> 
     <br /> 
     <br /> 
     <br />  
     <asp:CheckBoxList ID="cbSelectData" runat="server" AutoPostBack="False" AppendDataBoundItems="True" BorderStyle="Ridge" CellPadding="15" CellSpacing="2" RepeatColumns="6" BackColor="#FFD7AE"> 
     </asp:CheckBoxList> 
      <br /><br /> 

       <asp:Button ID="btnGetResults" runat="server" Text="Submit" OnClick="btnGetResults_Click"/> 

       <br /> 
     <asp:Label ID="Message" runat="server" Text=""></asp:Label> 
     <br /> <br />  

     <asp:Label ID="Label1" runat="server" Text="Select to filter by position:"></asp:Label> 
     <br /> <br /> <br /> 
       <asp:GridView ID="GridViewReport" runat="server" AutoGenerateColumns="False" DataKeyNames="Names" EnableModelValidation ="True" EmptyDataText="No records to display"> 
      <EditRowStyle BackColor="#0099CC" ForeColor="Black" /> 
      <HeaderStyle BackColor="Black" ForeColor="White" /> 
      <RowStyle BackColor="#FFFFCC" /> 
      <SelectedRowStyle BorderColor="#0099FF" /> 
     </asp:GridView> 
     <br /><br /><br /><br /> 
    </form> 
</body> 
</html> 

這裏是我的代碼背後:

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.IO; 
using System.Net.Mail; 
using aejw.Network; 

namespace WorkOrder 
{ 
    public partial class AdminReport : System.Web.UI.Page 
    { 

     protected void Page_Load(object sender, EventArgs e) 
     { 

      if (!Page.IsPostBack) // this keeps from loading everytime the page does a partial laod 
      { 
       LoadDataSource1(); 
      } 

      this.MaintainScrollPositionOnPostBack = true; 

     } 

     protected void btnGetResults_Click(object sender, EventArgs e) 
     { 

      LoadDataSource2();   

     } 

     protected void LoadDataSource1() 
     { 
      int i = 0; 
      SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["WConnectionString"].ConnectionString); 
      string query1 = "SELECT Name FROM sys.columns WHERE object_id = OBJECT_ID (@ObjectID)"; 
      SqlCommand cmd = new SqlCommand(query1, conn); 
      conn.Open(); 
      cmd.Parameters.AddWithValue("ObjectID", "dbo.WO_Submission_Details"); 
      SqlDataReader rdr = cmd.ExecuteReader(); 
      while (rdr.Read()) 
      { 
       cbSelectData.Items.Insert(i, rdr.GetValue(0).ToString()); 
       i++; 
      } 
      conn.Close(); 
     } 

     protected void LoadDataSource2() 
     { 

      SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["WOConnectionString"].ConnectionString); 
      string query2 = "SELECT Name FROM sys.columns WHERE object_id = OBJECT_ID (@ObjectID)"; 
      SqlCommand cmd2 = new SqlCommand(query2, conn); 
      conn.Open(); 
      { 
       cmd2.Parameters.AddWithValue("ObjectID", cbSelectData.SelectedItem.ToString()); 
       DataSet ds = new DataSet(); 
       SqlDataAdapter da = new SqlDataAdapter(cmd2); 
       da.Fill(ds); 
       GridViewReport.DataSource = ds; 
       //cbSelectData.DataTextField = "Name"; 
       //cbSelectData.DataValueField = "Name"; 
       //cbSelectData.DataBind(); 
       GridViewReport.DataBind(); 

       conn.Close(); 
      } 


     } 

    } 
}  

我在GridView綁定到數據源。我錯過了一步嗎?謝謝

+0

我假設你使用的調試。結果是什麼?調試器中'ds.Tables [0]'的內容是什麼?你有行嗎?順便說一句,你使用的是與'CheckBoxList'相同的元查詢。 –

+0

查詢類似,但ObjectID設置爲複選框列表selectedItem。 – user1863593

回答

0

你有AutoGenerateColumns="False",這意味着你想通過提供template-fieldsbound-fields來指定列。但是你不在aspx中添加任何列到GridView

所以將其更改爲:

<asp:GridView ID="GridViewReport" runat="server" AutoGenerateColumns="True" ... 

這裏的聲明添加的列的例子:

.... 
<Columns> 
    <asp:BoundField DataField="CustomerID" HeaderText="CustomerID" 
     InsertVisible="False" ReadOnly="True" SortExpression="CustomerID" /> 
    <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" 
     SortExpression="CompanyName" /> 
    <asp:BoundField DataField="FirstName" HeaderText="FirstName" 
     SortExpression="FirstName" /> 
    <asp:BoundField DataField="LastName" HeaderText="LastName" 
     SortExpression="LastName" /> 
</Columns> 
.... 
+0

我改變了AutoGenerateColumns =「True」,但它仍然沒有返回數據。 – user1863593

+0

你是否收到任何數據以返回網格? –

+0

沒有數據被返回 – user1863593

相關問題