将datagridview列值插入到数组c#中

时间:2016-11-02 11:18:55

标签: c# arrays datagridview

在我的表单中,我有一个从sqllite数据库填充的DataGridView(grid1)。 enter image description here

我想选择名称为" cap"的列。并将列的值插入数组中。 我该怎么办?

  1. 我找不到按名称选择列标题的方法,所以我决定用索引表示,但我不喜欢这样..
  2. 我不知道如何将这些值插入数组中。有很多列/单元格方法,但我不知道哪一个可以帮助我!
  3. 我尝试这样做(来自网站上的旧答案),但它给了我错误的#34;超出有界矩阵"

         int[] wareCap = new int[grid1.Rows.Count];
           ... 
         //How I filled my dgv, if this can help
        var context = new ForliCesenaEntities2(); 
         BindingSource bi1 = new BindingSource();  
        bi1.DataSource = context.warehouses.ToList();
        grid1.DataSource = bi1;
        grid1.Refresh();
    
        //How I try to insert the values into int[] wareCap 
        for (int i = 0; i<(grid1.Rows.Count-1); i++)
        wareCap[i] = Convert.ToInt16(grid1.Rows[i].Cells[1].Value);
    

    感谢您的建议

3 个答案:

答案 0 :(得分:2)

首先,您必须使用值填充gridview,然后:

List<int> intValues = new List<int>();
foreach (DataGridViewRow row in grid.Rows)
{
    intValues.Add(int.Parse(row.Cells["cap"].Value.ToString()));
}

int[] array = intValues.ToArray();

应该这样做。

或者,您可以使用LINQ。

int[] intArray = dataGridView1.Rows
                .Cast<DataGridViewRow>()
                .Select(row => int.Parse(row.Cells["cap"].Value.ToString())).ToArray();

更新:

如果DataGridView的AllowUserToAddRows属性设置为true,则上述解决方案可能会崩溃。因为在这种情况下,您的最后一行是用于输入新记录的行,Value为null,因此在其上调用ToString方法会导致NullReferenceException。

我看到两种可能性:

  • 将您的datagridview的AllowUserToAddRows属性设置为false(但用户无法添加新行),
  • 使用以下解决方案

检查该行是否是输入新记录的行:

int[] intArray = dataGridView1.Rows
                .Cast<DataGridViewRow>()
                .Where(row => !row.IsNewRow)
                .Select(row => Convert.ToInt32(row.Cells["cap"].Value.ToString())).ToArray();

答案 1 :(得分:0)

你已经在List中获得了所有的值,因为你做了某事。像这样:

bi1.DataSource = context.warehouses.ToList();

您可以轻松地将其存储在参考文献中:

var values = context.warehouses.ToList();
bi1.DataSource = values;

您的网格是基于此列表中的Objekts构建的。所以这应该构建你的数组:

int[] array = new int[values.Count];
int counter = 0;
foreach (var object in values)
{
  array[counter++] = object.CAP;
}

答案 2 :(得分:0)

int[] wareCap = new int[grid1.Rows.Count];
foreach(DataGridViewRow row in grid1.Rows)
{
    wareCap.Add(Convert.ToInt32(cell["cap"].Value.ToString()));
}