简体   繁体   English

检查DataTabe中的List C#中是否存在值

[英]Check if value exist in a List C# in DataTabe

I want to check in the grid and display it into the datatable: if the NPM already exists then the data will not be entered into the datatable 我想检查网格并将其显示在数据表中:如果NPM已经存在,则数据将不会输入到数据表中

i have data in grid 我在网格中有数据

NPM
123
121
122
124
124
124
128

in need datatable like this 需要这样的数据表

NPM
123
121
122
124
128

Left : Grid , Right : Datatable 左:网格,右:数据表 在此处输入图片说明

but my code always get all data. 但是我的代码总是获取所有数据。 please help 请帮忙

DataTable dt = new DataTable();

        dt.Columns.Add("NPM");

        grd2.DataSource = dt;

        string NPM = "";
        string NPM_CEK = "";

        for (int i = 0; i < grd.Rows.Count - 1; i++)
        {
            NPM = grd.Rows[i + 1]["NPM"].ToString();

            DataRow row = dt.NewRow();
            dt.Rows.Add(row);

            for (int j = 0; j < dt.Rows.Count; j++)
            {
                NPM_CEK = dt.Rows[j]["NPM"].ToString();

                if (NPM_CEK == NPM)
                {

                }
                else
                {
                    grd2.Rows[i + 1]["NPM"] = NPM;
                }
            }
        }

        grd2.AutoSizeCols();

but my code always get all data. 但是我的代码总是获取所有数据。 please help 请帮忙

i wanna data like this : 我想要这样的数据:

像这样

You can use linq for this, no need to loop through and manually assign rows. 您可以为此使用linq,而无需遍历和手动分配行。

if (sourceTable.Rows.Count > 0)//check for data
{
    dt = sourceTable.AsEnumerable()
    .GroupBy(x=>x.Field<int>("NPM"))// if that column type is `int`
    .Select(g=>g.First())          // take the first row of each group (if that's what you want)
    .CopyToData‌​Table();     // copy it to datatable
}

If you just want distinct NPM values in a datatable format on the other hand... 另一方面,如果您只想以数据表格式显示不同的NPM值...

if(sourceTable.Rows.Count > 0)
{
    dt = sourceTable.AsEnumerable()
         .Select(x=>x.Field<Int>("NPM"))
         .Distinct()
         .CopyToDataTable();
}
        DataTable dt = new DataTable();
        dt.Columns.Add("NPM");

        string NPM = "";
        string NPM_CEK = "";
        List<string> NPMList = new List<string>();

        for (int i = 0; i < grd.Rows.Count - 1; i++)
        {
            NPM = grd.Rows[i].Cells["NPM"].Value.ToString();

            if (!NPMList.Contains(NPM))
            {
                DataRow row = dt.NewRow();
                row[0] = NPM;
                dt.Rows.Add(row);

                NPMList.Add(NPM);
            }

        }

        grd2.DataSource = dt;  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM