Проверьте, существует ли значение в Списке C # в DataTabe - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу проверить в сетке и отобразить ее в таблицу данных: если NPM уже существует, то данные не будут введены в таблицу данных

У меня есть данные в сетке

NPM
123
121
122
124
124
124
128

нуждается в данных, например, вот так

NPM
123
121
122
124
128

Слева: сетка, справа: дата данных enter image description here

но мой код всегда получает все данные.помогите пожалуйста

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();

но мой код всегда получает все данные.Пожалуйста, помогите

Я хочу такие данные:

Like This

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019
        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;  
0 голосов
/ 26 февраля 2019

Для этого вы можете использовать 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
}

Если вы просто хотите получить разные значения NPM в формате данных с другой стороны ...

if(sourceTable.Rows.Count > 0)
{
    dt = sourceTable.AsEnumerable()
         .Select(x=>x.Field<Int>("NPM"))
         .Distinct()
         .CopyToDataTable();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...