我制作的代码很少列表。最后,我得到以下列表:
List<int> list_AmountNeed = new List<int>();
List<int> list_TotalCost = new List<int>();
List<int> list_TotalLose = new List<int>();
List<int> list_TotalGain = new List<int>();
经过一些计算后,这些列表包含值(如果重要的话,每个值为24个):
while (z < list_Exp.Count)
{
list_AmountNeed.Add((goalexp - currentexp) / Convert.ToInt32(list_Exp[z]));
list_TotalLose.Add(list_AmountNeed[z] * (list_Amount_MadeFrom_One[z] * list_BuyPrice_MadeFrom_One[z] + list_Amount_MadeFrom_Two[z] * list_BuyPrice_MadeFrom_Two[z]));
list_TotalGain.Add(list_AmountNeed[z] * list_AmountMade[z] * list_SellPrice[z]);
list_TotalCost.Add(list_TotalGain[z] - list_TotalLose[z]);
z++;
}
现在,我已经创建了一个包含按钮的UI和使用混合的Datagrid,我希望在单击按钮后,这些列表将显示在Datagrid列中。
我到目前为止所做的是将此代码插入按钮xaml.cs. 我不知道怎么办的事情是,如果我可以在按钮xaml.cs中编写显示代码,或者它必须在datagrid中,并且输入正确的代码以在列中显示它:
column 1:
list_AmountNeed
column 2:
list_TotalCost
等等。
谢谢!
答案 0 :(得分:2)
同样,DataGrid按行显示数据,因此不能只在不同列中显示独立列表。
DataTable(@ rory.ap建议)是一个出色的通用类,可以和DataGrid一起使用,但我想说它对于当前的要求来说太过分了。
让我们创建一个包含4个属性的POCO以及具有实际值的对象列表,并将它们显示在DataGrid中。
public class MyDataObject
{
public int Amount { get; set; }
public int Cost { get; set; }
public int Lose { get; set; }
public int Gain { get; set; }
}
窗口内容xaml
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition />
</Grid.RowDefinitions>
<Button Content="+" Click="DisplayClick"/>
<DataGrid Name="Dg" Grid.Row="1"/>
</Grid>
窗口代码隐藏
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private List<MyDataObject> L = new List<MyDataObject>
{
new MyDataObject {Amount = 1, Cost = 1, Gain = 1},
new MyDataObject {Amount = 2, Cost = 2, Gain = 4},
new MyDataObject {Amount = 3, Cost = 3, Gain = 9},
};
private void DisplayClick(object sender, RoutedEventArgs e)
{
Dg.ItemsSource = L;
}
}
分配ItemsSource时,DataGrid会为每个属性生成一列(属性名称显示在标题中),并在列和属性之间创建绑定
结果:
如果需要,使用其他属性扩展MyDataObject,例如
public class MyDataObject
{
public int SellPrice {get; set; }
public int Amount { get; set; }
public int Cost { get; set; }
public int Lose { get; set; }
public int Gain { get; set; }
}
可以修改计算方法以使用MyDataObject对象
var L = new List<MyDataObject>();
for(int z = 0; z < list_Exp.Count; z++)
{
var d = new MyDataObject();
d.Amount = (goalexp - currentexp) / Convert.ToInt32(list_Exp[z]);
d.Lose = d.Amount * (list_Amount_MadeFrom_One[z] * list_BuyPrice_MadeFrom_One[z] + list_Amount_MadeFrom_Two[z] * list_BuyPrice_MadeFrom_Two[z]);
// d.SellPrice = list_SellPrice[z];
d.Gain = d.Amount * list_AmountMade[z] * list_SellPrice[z];
d.Cost = d.Gain - d.Lose;
L.Add(d);
}
答案 1 :(得分:0)
与ASh非常相似,使用相同的原则。我的数据网格在Winform中,但您可以在XAML数据网格上执行相同的操作。
using System.Collections.Generic;
using System.Windows.Forms;
namespace PopulatingDataGridColumns_42584334
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
List<int> list_AmountNeed = new List<int>() { 3, 6, 7, 8, 9, 12 };
List<int> list_TotalCost = new List<int>() { 4, 3, 6, 9, 65, 87 };
List<int> list_TotalLose = new List<int>() { 7, 9, 2, 5, 15, 27 };
List<int> list_TotalGain = new List<int>() { 3, 1, 2, 2, 0, 4 };
List<gridviewdata> mydatalist = new List<gridviewdata>();
for (int i = 0; i < list_AmountNeed.Count; i++)
{
mydatalist.Add(new gridviewdata
{
col1 = list_AmountNeed[i].ToString(),
col2 = list_TotalCost[i].ToString(),
col3 = list_TotalLose[i].ToString(),
col4 = list_TotalGain[i].ToString()
});
}
dataGridView1.DataSource = mydatalist;//assuming the datagridview is named dataGridView1
}
}
class gridviewdata
{
public string col1 { get; set; }
public string col2 { get; set; }
public string col3 { get; set; }
public string col4 { get; set; }
}
}