我正在编写一个计算我的扩展的应用程序。我有一个固定的DatagridView,有12列(1月 - 12月)和5行(类别)。 我的课程:
Month -> contains the value of all 5 categories
Year -> SortedList<MonthSet.AcceptableMonths, Month>
AnnualSpend -> SortedList<ushort, Year>
在开始时,程序将解析XML文件并将数据存储在相关的类中。 现在我有5个属性(每个类别一个)的类'Month',并希望将特定月份绑定到相应的列。 我将能够通过每个单元格并“手动”插入值,但我不知道这是否是一个好方法。此外,我能够在ListBox中绑定所有年份,但我不知道如何绑定数据(当我从ListBox中选择一年时)。我尝试以正常方式执行此操作,但我将丢失所有已定义的行,并将添加新列。 我甚至不知道这是否像我在想的那样有效。如果没有,那么我必须通过每个单元格。
我希望这是可以理解的,有人可以告诉我这是否会起作用。
谢谢;)
答案 0 :(得分:0)
代码假设AcceptableMonths
是Enum
定义如下,因此可以从整数转换。
enum AcceptableMonths
{
JAN, FEB, MAR, ARP, MAY, JUN, JLY, AUG, SEP, OCT, NOV, DEC
}
您可以从DataSet
构建AnnualSpend
,然后将其中一个表(一年的费用)设置为DataSource
的{{1}}。从类到DataSet的映射是。
DataGridView
构造DataSet的代码
Month->A Column, Year->A DataTable, AnnualSpend->The entire DataSet
然后从ListBox设置DataGridView的DataSource。
AnnualSpend annualSpend; //already populated
DataSet dataSet;
private void PopulateDataSet()
{
dataSet = new DataSet();
foreach (ushort yr in annualSpend.Keys)
{
Year year = annualSpend[yr];
DataTable tableOfYear = new DataTable(yr.ToString()); //as key to access the Table
//Adding columns
List<string> columnNames = new List<string>();
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
columnNames.Add(column.Name);
column.DataPropertyName = column.Name; //!!!Important!!!
tableOfYear.Columns.Add(new DataColumn(column.Name));
}
//Adding rows
DataRow newRowForFoodExpense = tableOfYear.NewRow();
//then 4 data rows for other expense categories...
//DataRow newRowForHouseRent = tableOfYear.NewRow();
for (int m = 0; m < columnNames.Count; m++)
{
newRowForFoodExpense[columnNames[m]] = year[(AcceptableMonths)m].Food;
//then 4 data rows for other expense categories...
}
tableOfYear.Rows.Add(newRowForFoodExpense);
//then 4 data rows for other expense categories...
dataSet.Tables.Add(tableOfYear);
}
}
!!!重要!!!
由于您的DataGridView在DataBinding之前已经定义了12列,因此您需要将listBox1.SelectedIndexChanged += (s, e) =>
{
ushort yr = (ushort)listBox1.SelectedItem;
dataGridView1.DataSource = dataSet.Tables[yr.ToString()];
};
的每一列的DataPropertyName
property设置为与DataTable的列名相同,否则绑定将添加新的列。