C# Windows窗体数据网格行显示问题

C# Windows窗体数据网格行显示问题,c#,winforms,C#,Winforms,我正在使用windows窗体,当我在做一些事情时,我注意到我的datagridview工作不正常 这是我的密码: private void Button1_Click(object sender, EventArgs e) { DataTable table = new DataTable(); table.Columns.Add("aa", typeof(string)); table.Columns.Add("AA",

我正在使用windows窗体,当我在做一些事情时,我注意到我的datagridview工作不正常

这是我的密码:

private void Button1_Click(object sender, EventArgs e)
{
            DataTable table = new DataTable();

            table.Columns.Add("aa", typeof(string));
            table.Columns.Add("AA", typeof(string));
            table.Columns.Add("Aa", typeof(string));
            table.Columns.Add("aA", typeof(string));

            string[] arr = { "BB", "Bb", "bB", "bb"};

            table.Rows.Add(arr);

            dataGridView1.DataSource = table;
}
我希望看到一个包含以下列的表
aa;AA;Aa;aA
和行
BB;Bb;bB;bb

列显示正确,但行显示为:

BB ; BB ; BB ; BB
为什么会这样


请帮帮我,谢谢

上面它不起作用的原因是您正在将整行添加到arr[0]。要解决此问题,必须将行中的每个值分配给相应的列。尝试执行以下操作以获得所需的结果:

    private void Button1_Click(object sender, EventArgs e)
    {
        string[] arr = { "BB", "Bb", "bB", "bb" };
        int numberOfColumns = 4;
        int numberOfRows = 4;

        dataGridView1.Columns.Add("aa", "aa");
        dataGridView1.Columns.Add("AA", "AA");
        dataGridView1.Columns.Add("Aa", "Aa");
        dataGridView1.Columns.Add("aA", "aA");

        dataGridView1.Rows.Add(numberOfRows);

        for (int i = 0; i < numberOfColumns; i++)
        {
            dataGridView1[i, 0].Value = arr[i];
        }
    }
private void按钮1\u单击(对象发送者,事件参数e)
{
字符串[]arr={“BB”、“BB”、“BB”、“BB”};
int numberOfColumns=4;
int numberOfRows=4;
dataGridView1.Columns.Add(“aa”、“aa”);
dataGridView1.Columns.Add(“AA”、“AA”);
dataGridView1.Columns.Add(“Aa”、“Aa”);
dataGridView1.Columns.Add(“aA”、“aA”);
dataGridView1.Rows.Add(numberOfRows);
for(int i=0;i
如果要使用数据源,我将首先创建一个类,将我的值添加到该类的每个属性(列),如下所示:

class MyValues
{
    public string aa { get; set; }
    public string AA { get; set; }
    public string Aa { get; set; }
    public string aA { get; set; }
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private List<MyValues> list = new List<MyValues>();

    private void Button1_Click(object sender, EventArgs e)
    {
        list.Add(new MyValues { aa = "BB", AA = "Bb", Aa = "bB", aA = "bb" });

        dataGridView1.DataSource = list;
    }

}
类MyValue
{
公共字符串aa{get;set;}
公共字符串AA{get;set;}
公共字符串Aa{get;set;}
公共字符串aA{get;set;}
}
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有列表=新列表();
私有无效按钮1\u单击(对象发送者,事件参数e)
{
添加(新的MyValue{aa=“BB”、aa=“BB”、aa=“BB”、aa=“BB”、aa=“BB”});
dataGridView1.DataSource=列表;
}
}

您的列都有相同的名称

C#区分大小写,但
DataTable
无法区分它们

给他们起不同的名字,一切都好:

table.Columns.Add("aa1", typeof(string));
table.Columns.Add("AA2", typeof(string));
table.Columns.Add("Aa3", typeof(string));
table.Columns.Add("aA4", typeof(string));
关于列名:

名称比较不区分大小写

这是一个奇怪的发现,正如人们所期望的:

在DataColumnCollection上添加

集合已具有具有指定名称的列。(修订) 比较不区分大小写。)


…但它没有被提出。

好的,你的答案并不完全正确,但有了它,我可以发现问题:我必须使用dataGridView1.Rows.Add(arr);而不是table.Rows.Add(arr);不管怎样,谢谢你的帮助+rep@LPeSi:不,您不必这样做,这实际上意味着放弃数据绑定。建议的解决方案是使用正确的列名!