只获取数据一个数据(数据表) [英] Only take data one data (datatable)
问题描述
我想检查网格并将其显示在数据表中:如果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屋!