簡體   English   中英

排序數據表列在C#中不起作用

[英]Sorting DataTable column is not working in C#

我是C#的新手,正在使用Windows窗體。

我有Form1 ,它具有buttonDatagridviewflowLayoutPanel 我在SQL中有一個大地址表(400,000條記錄),我試圖根據特定的給定郵政編碼導入門牌號,然后將這些數字分配給按鈕文本,如下所示:

     SqlConnection MyConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);
     SqlCommand MySQLCommand = new SqlCommand();
     DataTable Data_Table1 = new DataTable();
     SqlDataAdapter SQLDataAdapter = new SqlDataAdapter();


  private void button1_Click(object sender, EventArgs e)
    {

        string PostCode = "L8 8HN";

        Data_Table1.Rows.Clear();
        Data_Table1.Columns.Clear();  
        MyConnection.Open();          
        MySQLCommand.CommandText = "SELECT * FROM PC where Postcode= '" + PostCode + "'";

        MySQLCommand.Connection = MyConnection;
        SQLDataAdapter.SelectCommand = MySQLCommand;
        SQLDataAdapter.Fill(Data_Table1);
        MySQLCommand.Parameters.Clear();
        SQLDataAdapter.Dispose();
        MyConnection.Close();


        // Sort the "Building Number" column. 
        DataTable dt2 = Data_Table1.Clone();
        dt2.Columns["Building Number"].DataType =    Type.GetType("System.Int32");
        foreach (DataRow dr in Data_Table1.Rows)
        {
            dt2.ImportRow(dr);
        }
        dt2.AcceptChanges();
        DataView dv = dt2.DefaultView;
        dv.Sort = "Building Number ASC";


        //Create buttons and make Building Number as text.
       int RowIndex = dt2.Rows.Count - 1;
        for (int i = 0; i <= RowIndex; i++)
        {
            Button btn = new Button();
            btn.Text = dt2.Rows[i]["Building Number"].ToString();
            btn.Width = 50;
            btn.Height = 50;        
            flowLayoutPanel1.Controls.Add(btn);
        }

        // check if the column "Building Number" is sorted or not.
        dataGridView1.DataSource = dt2;

}

當我單擊button1 ,SQL查詢將根據給定的郵政編碼顯示所有建築物編號,然后對建築物編號進行排序,然后創建新的按鈕,並根據建築物編號創建其文本,同時在datagridview顯示dt2

  • 問題:

屏幕截圖

如屏幕快照所示, datagridview “ Building Number”列按我的datagridview排序,但是當我循環拋出dt2並從dt2分配buttons文本時,在這種情況下, buttons的排序方式不正確。 應該按照在datagridview正確的方式對按鈕進行排序

請注意,SQL表中的“建築物編號”列是字符串類型。 我也使用datagridview只是為了查看該列是否已排序。

我在這里這里這里看了看,但沒有一個人幫助我。

如果有人知道如何從1、2、3、4、5、6、7開始正確地對這些按鈕進行排序...

謝謝

您正在創建一個有序的DataView ,但是在創建按鈕的循環中,您正在使用無序的dt2 您應該將該循環更改為:

for (int i = 0; i <= RowIndex; i++)
{
    Button btn = new Button();
    btn.Text = dv[i]["Building Number"].ToString();
    btn.Width = 50;
    btn.Height = 50;        
    flowLayoutPanel1.Controls.Add(btn);
}

作為更好的選擇,為什么不執行訂購數據的所有步驟,為什么不在SQL查詢中將其訂購?

MySQLCommand.CommandText = "SELECT * FROM PC where Postcode= '" + PostCode + "' order by Building Number";

我還建議您使用參數化查詢而不是連接字符串以避免SQL注入

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM