通过c#代码避免网格视图中的重复行

时间:2016-10-19 10:43:08

标签: c# asp.net c#-4.0

我编写了以下代码,以防止在某些字段的基础上出现重复行。

我在网格视图中使用模板字段,如txtLicenseNumber和lblJurisdiction。

code /path/to/file/or/directory/you/want/to/open

请注意,Grid具有以下字段和行值。

  • [lblJurisdiction] - [txtLicenseNumber] - [IssueDate]

  • [Abc] - [123] - [12/12/2015]

  • [Abc] - [123] - [12/12/2015]

  • [Abc] - [123] - [12/12/2015]

  • [def] - [123] - [12/12/2015]

  • [def] - [123] - [12/12/2015]

  • [def] - [123] - [12/12/2015]

由于数据绑定时的连接操作,值在网格视图中重复。由于一些要求,我只需要一个。

现在我想让其中一个像

一样可见
  • [Abc] - [123] - [12/12/2015]

  • [def] - [123] - [12/12/2015]

上述代码不起作用。请帮忙!!!

2 个答案:

答案 0 :(得分:1)

你的内循环有问题。它应该以(i + 1)开始计算行数。你的内部和其他循环正在获取相同的行。

private void AvoidDuplicate()
    {

        for (int i = 0; i < grdView.Rows.Count; i++)
        {
            TextBox txtoldvalue = grdView.Rows[i].FindControl("txtLicenseNumber") as TextBox;
            string oldvalue = txtoldvalue.Text.ToString();

            Label txtoldvalueJ = grdView.Rows[i].FindControl("lblJurisdiction") as Label;
            string oldvalueJ = txtoldvalueJ.Text.ToString();

            if (oldvalue != "" || oldvalueJ !="")  
            {
                for (int j = i+1; j < grdView.Rows.Count; j++)
                {
                    TextBox txtnewvalue = grdView.Rows[j].FindControl("txtLicenseNumber") as TextBox;
                    string newvalue = txtnewvalue.Text.ToString();

                    Label txtnewvalueJ = grdView.Rows[j].FindControl("lblJurisdiction") as Label;
                    string newvalueJ = txtnewvalueJ.Text.ToString();

                        if (oldvalue != newvalue || oldvalueJ != newvalueJ)
                        {
                            grdView.Rows[i].Visible = true;
                        }
                        else
                        {
                            grdView.Rows[i].Visible = false;
                            break;
                        }
                    }
            }
        }
    }

使用 DefaultView 的更好方法。从datatable(gridview的源代码)本身删除重复的行。

datatable = datatable.DefaultView.ToTable(true, "Col1ToCompare", "Col2ToCompare");

答案 1 :(得分:1)

我使用了一种方法来合并具有相似值的GridView行。没关系。我不打算编辑或检查您的代码。但是分享我使用的那个如下:

private void AvoidDuplicates()
{
    int i = GridView1.Rows.Count - 2; //GridView row count
    while (i >= 0) //Iterates through a while loop to get row index
    {
        GridViewRow curRow = GridView1.Rows[i]; //Gets the current row
        GridViewRow preRow = GridView1.Rows[i + 1]; //Gets the previous row

        int j = 0;
        while (j < curRow.Cells.Count) //Inner loop to get the row values
        {
            /****Condition to check if it has duplicate rows - Starts****/
            if (curRow.Cells[j].Text == preRow.Cells[j].Text) //Matches the row values
            {
                if (preRow.Cells[j].RowSpan < 2)
                {
                    curRow.Cells[j].RowSpan = 2;
                    preRow.Cells[j].Visible = false;
                }
                else
                {
                    curRow.Cells[j].RowSpan = preRow.Cells[j].RowSpan + 1;
                    preRow.Cells[j].Visible = false;
                }
            }
           /****Ccondition to check if it has duplicate rows - Ends****/
            j++;
        }
        i--;
    }
} 

最后将上面的方法放在页面加载中并查看结果。希望有所帮助。