我有一个WFA,目前有2个表格。
第一个表单包含一个DataGridView,它的数据源是一个列表。 当用户单击按钮时,这将打开form2。在form2中我有一个bubblesort算法,它根据它的一个属性对列表进行排序。然后它将更新列表传递回form1,并将新数据源设置为form2中的bubbledsorted更新列表。
现在这个工作,bubblesort工作。但是,form1上的DGV不会更新,除非我点击DGV的各个行/单元格。我必须单独点击每一个,以便他们处于新的排序位置。
这是我的代码:
FORM1:
//This just shows Form2
private void sortByPriority_Click(object sender, EventArgs e)
{
fm2 = new Form2();
fm2.Show();
}
//This is called by form2 to set the new datasource
public void refreshDataGrid(DataGridView p)
{
dataGridView1.DataSource = null;
dataGridView1.DataSource = p.DataSource;
}
FORM2:
private void sortPriority_Click(object sender, EventArgs e)
{
int temp = 0;
bool tempforComp;
string tempforDate = "";
string tempforDesc = "";
string tempforName = "";
for (int write = 0; write < 10; write++)
{
for (int sort = 0; sort < toDoGen.task.Count - 1; sort++)
{
if (toDoGen.task[sort].Priority > toDoGen.task[sort + 1].Priority)
{
temp = toDoGen.task[sort + 1].Priority;
tempforComp = toDoGen.task[sort + 1].Completed;
tempforDate = toDoGen.task[sort + 1].DateOfCompletion;
tempforDesc = toDoGen.task[sort + 1].Description;
tempforName = toDoGen.task[sort + 1].Name;
toDoGen.task[sort + 1].Priority = toDoGen.task[sort].Priority;
toDoGen.task[sort + 1].Completed = toDoGen.task[sort].Completed;
toDoGen.task[sort + 1].DateOfCompletion = toDoGen.task[sort].DateOfCompletion;
toDoGen.task[sort + 1].Description = toDoGen.task[sort].Description;
toDoGen.task[sort + 1].Name = toDoGen.task[sort].Name;
toDoGen.task[sort].Priority = temp;
toDoGen.task[sort].Completed = tempforComp;
toDoGen.task[sort].DateOfCompletion = tempforDate;
toDoGen.task[sort].Description = tempforDesc;
toDoGen.task[sort].Name = tempforName;
}
}
DataGrid n = new DataGrid();
n.DataSource = toDoGen.task;
refresh();
}
}
private void refresh()
{
fm1 = new Form1();
fm1.refreshDataGrid(n);
}
编辑:更新并且要明确 - 我需要使用多种形式(大学作业),尽管如此,即使我在Form1中使用了排序算法,它也没有更新。
答案 0 :(得分:0)
我将做一个不使用BubbleSort算法的简化示例,我希望它有所帮助:
这是Form1类的代码。我定义了一个StringValue类:How to bind a List<string> to a DataGridView control?
public class StringValue
{
public StringValue(string s)
{
_value = s;
}
public string Value { get { return _value; } set { _value = value; } }
string _value;
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = new List<StringValue> {
new StringValue("string1"),
new StringValue("string3"),
new StringValue("string2")
};
}
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(this, dataGridView1.DataSource as List<StringValue>);
form2.Show();
}
public void RefreshGrid(List<StringValue> source)
{
dataGridView1.DataSource = source;
}
}
按钮单击事件打开Form2并将网格视图数据源传递给它。这是Form2:
public partial class Form2 : Form
{
Form1 _form1;
List<StringValue> _source;
public Form2(Form1 form1, List<StringValue> source)
{
_form1=form1;
_source=source;
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
_source = _source.OrderBy(x => x.Value).ToList();
_form1.RefreshGrid(_source);
this.Close();
}
}
单击Form2中的按钮后,DataGridView1的数据源将使用已排序的版本进行刷新,并且Form2将关闭。