2014-10-22 38 views
0

我正在嘗試構建一個簡單的頁面,該頁面允許使用文本區域進行批量SQL搜索。文本框被分割成每一行,每一行作爲查詢參數。生成的行然後被添加到DataTable。帶有行的DataTable不會綁定到Gridview

查詢沒有問題,DataTable按照我的預期通過調試模式進行檢查時生成並返回。唯一的問題是,當我嘗試將DataTable綁定到gridview時,gridview沒有行。

我一直在爲這個hwile現在抓我的頭,不知道爲什麼DataTable不會綁定。列名全部匹配,但結果中的實際表未命名。這是一個問題嗎?

這是代碼。

ASPX:

<asp:GridView 
     ID="GridView1" 
     runat="server"    
     AutoGenerateColumns="false"> 
     <Columns> 
      <asp:BoundField DataField="SIM NUMBER" HeaderText="SIM NUMBER" /> 
      <asp:BoundField DataField="Voice" HeaderText="Voice" /> 
      <asp:BoundField DataField="IMSI" HeaderText="IMSI" /> 
      <asp:BoundField DataField="Tariff" HeaderText="Tariff" /> 
      <asp:BoundField DataField="Contract Start" HeaderText="Contract Start" /> 
      <asp:BoundField DataField="Supplier" HeaderText="Supplier" /> 
     </Columns> 
    </asp:GridView> 

和C#代碼:

public partial class Query : System.Web.UI.Page 
{ 
    protected static string numbers = ""; 
    protected static string number; 
    protected static DataTable result = new DataTable(); 

    protected static string simNumber; 
    protected static string voice; 
    protected static string IMSI; 
    protected static string tariff; 
    protected static string contractStart; 
    protected static string supplier; 


    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     result.Reset(); 
     result.Columns.Add("SIM NUMBER", typeof(string)); 
     result.Columns.Add("Voice", typeof(string)); 
     result.Columns.Add("IMSI", typeof(string)); 
     result.Columns.Add("Tariff", typeof(string)); 
     result.Columns.Add("Contract Start", typeof(string)); 
     result.Columns.Add("Supplier", typeof(string)); 
     numbers = TextArea1.Value.ToString(); 
     search(); 
     GridView1.DataSource = result; 
     GridView1.DataBind(); 
    } 

    protected static void search() 
    { 
     string[] split = numbers.Split(new string[] { "\r\n" }, StringSplitOptions.None); 

     foreach (string line in split) 
     { 
      if (line == string.Empty) 
       continue; 

      number = line; 
      getSupplierInfo(); 
     } 
    } 

    protected static void getSupplierInfo() 
    { 
     DataTable DT = new DataTable(); 
     using (SqlConnection conn = new SqlConnection(connections.supplierInfo())) 
     { 
      string sql = " SELECT * FROM UnionSuppliers WHERE SIM_NUMBER LIKE @parameter "; 
      conn.Open(); 

      using (SqlCommand select = new SqlCommand 
      { 
       CommandType = CommandType.Text, 
       CommandTimeout = 300, 
       CommandText = sql, 
       Connection = conn 
      }) 
      {      
       select.Parameters.AddWithValue("@parameter", number); 
       SqlDataAdapter adapter = new SqlDataAdapter(); 
       DataSet ds = new DataSet(); 
       adapter.SelectCommand = select; 
       adapter.Fill(ds); 
       DT = ds.Tables[0]; 
      } 

     } 
     foreach (DataRow dr in DT.Rows) 
     { 
      simNumber = dr["SIM_NUMBER"].ToString(); 
      voice = dr["Voice"].ToString(); 
      IMSI = dr["IMSI"].ToString(); 
      tariff = dr["Tariff"].ToString(); 
      contractStart = dr["Contract_start"].ToString(); 
      supplier = dr["Supplier"].ToString(); 
      addRow(); 
     } 
    } 

    protected static void addRow() 
    { 
     DataRow simResult = result.NewRow(); 

     simResult["SIM Number"] = simNumber; 
     simResult["Voice"] = voice; 
     simResult["IMSI"] = IMSI; 
     simResult["Tariff"] = tariff; 
     simResult["Contract Start"] = contractStart; 
     simResult["Supplier"] = supplier; 
     result.Rows.Add(simResult); 
    } 
} 

任何幫助將是非常讚賞。我確定它很簡單,我錯過了。

感謝

+0

不要使用靜態DataTable,它將最好地創建鎖。 – 2014-10-22 10:54:31

+0

好了所以問題解決了。它需要設置一個DataKey名稱。知道這是簡單的事情。 – Tinydan 2014-10-22 15:02:17

回答

0

嘗試改變:

AutoGenerateColumns="false" 

到:

AutoGenerateColumns="true" 
+0

否沒有工作。我不確定這個問題,因爲我手動設置了列綁定。 – Tinydan 2014-10-22 11:10:57

0

我想你可以嘗試這樣的aspx文件

<Columns> 
    <ItemTemplate> 
     <asp:Label ID="Label1" runat="server" Text='<%# Bind("Your_Field_Name") %>'></asp:Label> 
    </ItemTemplate> 
</Columns> 

,並在CS文件只是符合代碼

DataTable DT = new DataTable(); 
    using (SqlConnection conn = new SqlConnection(connections.supplierInfo())) 
    { 
     string sql = " SELECT * FROM UnionSuppliers WHERE SIM_NUMBER LIKE @parameter "; 
     conn.Open(); 

     using (SqlCommand select = new SqlCommand 
     { 
      CommandType = CommandType.Text, 
      CommandTimeout = 300, 
      CommandText = sql, 
      Connection = conn 
     }) 
     {      
      select.Parameters.AddWithValue("@parameter", number); 
      SqlDataAdapter adapter = new SqlDataAdapter(); 
      DataSet ds = new DataSet(); 
      adapter.SelectCommand = select; 
      adapter.Fill(ds); 
      DT = ds.Tables[0]; 
     } 

    } 

現在將您的Datatable綁定到網格視圖。

GridView1.DataSource = DT; 
    GridView1.DataBind(); 
相關問題