只获取数据一个数据(数据表) [英] Only take data one data (datatable)

查看:79
本文介绍了只获取数据一个数据(数据表)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想检查网格并将其显示在数据表中:如果NPM已经存在则数据将不会输入到数据表中



i有数据in grid



NPM

123

121

122

124

124

124

128



有需要这样的数据表



NPM

123

121

122
124

128



但我的代码总能得到所有数据。请帮助



我尝试过的事情:



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

i have data in grid

NPM
123
121
122
124
124
124
128

in need datatable like this

NPM
123
121
122
124
128

but my code always get all data. please help

What I have tried:

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

推荐答案

您始终将所有数据设置为数据源:

You always set all the data as your datasource:
grd2.DataSource = dt;



然后你总是将所有行添加到DataTable:


And then you alway add all rows to the DataTable:

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

如果您不想要一行,请不要添加它!

If you don't want a row, don't Add it!


您可以使用 DataTable.Select()方法 [ ^ ],返回一个DataRow对象数组。



You can filter data in grid via using DataTable.Select() method[^], which returns an array of DataRow objects.

//get source datatable
DataTable srcdt = (DataDatable)grid.DataSource;
//create destination datatable -> a datasource for grid2
DataTable dstdt = new DataTable();
dstdt.Columns.Add(new DataColumn("NPM", typeof(int)));
for(int i=0; i<srcdt.Rows.Count;i++)
{
	var processedNPM = srcdt.Rows[i][0]; //replace 0 with correct column number
	var npmcheck = dstdt.Select(string.Format("NPM={0}", processedNPM)).FirstOrDefault();
	if(npmcheck!=null) 
	{
		//row already exists in a destination table! Do NOT add it!
	}
	else
	{
		dstdt.Rows.Add(srcdt.Rows[i].Clone());
	}
}





另一种方式是使用Linq:



Another way is to use Linq:

dstdt = srcdt.AsEnumerable()
	.GroupBy(x=>x.Field<int>("NPM")) //grou data by NMP field
	.Select(grp=>dstdt.LoadDataRow(new object[]{grp.Key}, false)) //get distinct data 
	.CopyToDataTable();





注意:更改 x.Field< int>( NPM)到您的数据类型,例如: x.Field< string>(NPM) - 如果 NMP 字段是字符串的类型。



祝你好运!



Note: change x.Field<int>("NPM") to your data type, for example: x.Field<string>("NPM") - if a NMP field is type of string.

Good luck!


这篇关于只获取数据一个数据(数据表)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆