【发布时间】:2017-08-11 15:49:57
【问题描述】:
我是 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 查询会根据给定的邮政编码获取所有建筑编号,然后对建筑编号进行排序,然后创建新按钮并根据建筑编号制作其文本,同时显示dt2 在datagridview。
- 问题:
如屏幕截图所示,datagridview 中的“Building Number”列按我想要的方式排序,但是当我循环抛出dt2 并从dt2 分配buttons 文本时,在本例中为@987654337 @ 没有以正确的方式排序。
按钮应该按照datagridview中的正确方式排序
请注意,SQL 表中的“Building Number”列是字符串类型。另外我使用datagridview 只是为了查看该列是否已排序。
我查看了here、here 和here,但它们都没有帮助我。
如果有人知道我怎样才能以正确的方式从 1、2、3、4、5、6、7 开始排序这些按钮...
谢谢
【问题讨论】:
-
你在动态创建按钮吗?
-
@J.SMTBCJ15。是的