在datagridview C#中填写重复数据的编号

时间:2017-08-15 04:52:59

标签: c# datagridview

我想在dataGridView中填写重复数据的数字。如果重复我将填写从1.1到1.(计数重复)否则不要复制我填写1.1。但我使用代码,因为它的工作不正常。

double

我希望每个人都能帮助我。

2 个答案:

答案 0 :(得分:0)

如果为CSIS和BSS订购了列表,您只需要检查实际行之前的行以确定Wbs。

这里的技巧是在标记之前进行分组,然后只检查之前的那个。

我认为如果你在数据网格视图中处理它们之前使用poco对象可以更好地推理,这里有一些没有经过测试的代码,但是你可以在Rows和Cells上使用或多或少相同的代码。 / p>

class Data {
  String Wbs { get; set; }
  String Csis { get; set; }
  String Bss { get; set; }
  String CsisAndBss() => Csis + Bss;
}

var list = new Data { ... }; // objects

list.OrderBy( ... ); // Csis then Bss

for(int i = 0; i < list.Count; list++){
  var actual = list[i];
  var before = list[i-1]; // check list boundaries
  if(i==0 || before.CsisAndBss != actual.CsisAndBss){
    actual.Wbs == "1.1";
    continue;
  }
  var values = before.Wbs.Split(".");
  actual.Wbs = $"{values[0]}.{Int32.Parse(values[1]+1)}";
}

// here pass data to the grid

答案 1 :(得分:0)

您的代码存在一些问题。您没有在i循环中重新设置计数,并且(如果我理解正确的话),您只需要检查DataGridView中的先前值(即j

所以你的代码应该是这样的:

int count;
dataGridView3.Rows[0].Cells[1].Value = "1.1";
for (int i = 1; i <= dataGridView3.RowCount - 1; i++)
{
    count = 1;
    string abc = dataGridView3.Rows[i].Cells[2].Value.ToString() + "" + dataGridView3.Rows[i].Cells[3].Value.ToString();

    for (int j = 0; j < i; j++)
    {
        string def = dataGridView3.Rows[j].Cells[2].Value.ToString() + "" +  dataGridView3.Rows[j].Cells[3].Value.ToString();
        if (abc == def)
        {
            count++;
        }
    }
    dataGridView3.Rows[i].Cells["Wbs"].Value = "1." + count.ToString();
}

无论数据顺序如何,这都有效。如果数据是在CSIS和BSS上订购的,那么您可以使用:

int count = 1;

dataGridView3.Rows[0].Cells[1].Value = "1.1";

for (int i = 1; i <= dataGridView3.RowCount - 1; i++)
{
    if (dataGridView3.Rows[i].Cells[2].Value == dataGridView3.Rows[i - 1].Cells[2].Value 
&& dataGridView3.Rows[i].Cells[3].Value == dataGridView3.Rows[i - 1].Cells[3].Value)
    {
        count++;
    }
    else
    {
        count = 1;
    }
    dataGridView3.Rows[i].Cells["Wbs"].Value = "1." + count.ToString();
}

在这种情况下,因为我们只将一行与其前一行进行比较,所以不将变量存储在新变量中更有效,而是直接比较它们。存储到单独的变量只有速度增益,当您保存编译的代码时,需要多次取消引用相同的值。