2017-06-12 19 views
0

我正在做一个项目,我需要按降序排列我的数据网格,然后点击阻止按钮。一旦块被单击,该行中的优先级将从数字变为-1,然后将其移动到网格的底部,并将最高优先级值推送到网格的顶部。它在我第一次单击阻止按钮时起作用,但在此之后没有其他响应单击就绪或阻止按钮。我想用-1值将所有块项目移动到列表的底部,然后在点击准备好后,将所有项目返回到网格中正确的等级。有人可以解释为什么它只在删除按钮的第一次点击时对我的网格进行排序吗?如何在我的DataGridView上多排序一次?

namespace Dispatcher_2._0 
    { 
     public partial class Form1 : Form 
     { 
      DataTable Table = new DataTable();    

      public Form1() 
      { 
       InitializeComponent(); 
      } 

      private void Form1_Load(object sender, EventArgs e) 
      { 
       Table.Columns.Add("PID", typeof(int)); 
       Table.Columns.Add("Status", typeof(string)); 
       Table.Columns.Add("Priority", typeof(int)); 
       Table.Rows.Add(91, "Current Process", 0); 
       Table.Rows.Add(92, "Ready", 23); 
       Table.Rows.Add(95, "Ready", 22); 
       Table.Rows.Add(93, "Ready", 28); 
       Table.Rows.Add(94, "Ready", 44); 
       dataGridView1.DataSource = Table; 
       DataGridViewButtonColumn Btn = new DataGridViewButtonColumn(); 
       DataGridViewButtonColumn Btn1 = new DataGridViewButtonColumn(); 
       DataGridViewButtonColumn Btn2 = new DataGridViewButtonColumn(); 

       Btn.Name = "Ready"; 
       Btn.Text = "Ready"; 

       Btn1.Name = "Block"; 
       Btn1.Text = "Block"; 

       Btn2.Name = "Terminate"; 
       Btn2.Text = "Terminate"; 
       Btn.UseColumnTextForButtonValue = true; 
       Btn1.UseColumnTextForButtonValue = true; 
       Btn2.UseColumnTextForButtonValue = true; 
       dataGridView1.Columns.Add(Btn); 
       dataGridView1.Columns.Add(Btn1); 
       dataGridView1.Columns.Add(Btn2); 

      } 

      private void button3_Click(object sender, EventArgs e) 
      { 
       Table.Clear();  
      } 

      private void button2_Click(object sender, EventArgs e) 
      { 
       if (dataGridView1.Rows.Count == 0) 
       { 
        Table.Rows.Add(91, "Current Process", 0); 
        Table.Rows.Add(92, "Ready", 23); 
        Table.Rows.Add(95, "Ready", 22); 
        Table.Rows.Add(93, "Ready", 28); 
        Table.Rows.Add(94, "Ready", 44); 
        dataGridView1.DataSource = Table; 
       } 
       else { } 

       dataGridView1.Refresh(); 
      } 

      private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
      { 
       int selectedRow = dataGridView1.CurrentCell.RowIndex; 
       string value = dataGridView1.Rows[0].Cells[1].FormattedValue.ToString(); 
       string value1 = dataGridView1.Rows[selectedRow].Cells[selectedRow].FormattedValue.ToString(); 

       if (dataGridView1.Columns[e.ColumnIndex].Name == "Ready") 
       { 
        dataGridView1.Rows[selectedRow].Cells[1].Value = "Ready"; 
       } 
       if (dataGridView1.Columns[e.ColumnIndex].Name == "Block") 
       { 
        dataGridView1.Rows[selectedRow].Cells[1].Value = "Blocked"; 
        dataGridView1.Rows[selectedRow].Cells[2].Value = "-1"; 
        DataView Tab = new DataView(Table); 
        Tab.Sort = "Priority desc"; 
        dataGridView1.DataSource = Tab; 
       } 
       if (dataGridView1.Columns[e.ColumnIndex].Name == "Terminate") 
       { 
        dataGridView1.Rows.RemoveAt(0); 
       } 
      } 

      private void button1_Click(object sender, EventArgs e) 
      { 
       Table.Rows.Add(new Random().Next(50, 100), "Ready", textBox1.Text); 
      } 
     } 
    } 
+1

看看在https://stackoverflow.com/questions/8891390/how-to-sort-a-datagridview-by-2-columns – Tarzan

+0

哇感谢,工作得很好 – Jimbo

+1

可能重复[如何排序datagridview由2列](https://stackoverflow.com/questions/8891390/how-to-sort-a-datagridview-by-2-columns) –

回答

0

我一直只是填补我的表,而无需使用数据源,所以我不完全知道如何工作的。不过,我想我会看到你的问题 - 听起来你需要编写一个自定义的比较函数来排序表。只要您有必须根据多列对数据进行排序,这一点很有必要。