[英]Sorting DataTable column is not working in C#
我是C#的新手,正在使用Windows窗體。
我有Form1
,它具有button
, Datagridview
和flowLayoutPanel
。 我在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.