如何遍历数据表并过滤C#中的项目 [英] How to loop through a datatable and filter items in C#

查看:54
本文介绍了如何遍历数据表并过滤C#中的项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Windows窗体中有一个tabcontrol,下面有一个SQL数据库。



数据库 [ ^ ]



表格 [ ^ ]



< pre lang =c#> 

private void CreateTabPages()//为每个ProductType创建标签页

{

con.Open();

SqlDataAdapter sda = new SqlDataAdapter(SELECT DISTINCT ProductType,Description FROM TblProductType,con);

DataTable dt = new DataTable( );

sda.Fill(dt);



foreach(dt.Rows中的DataRow博士)

{

tabControl1.TabPages.Add(dr [ProductType]。ToString(),dr [Descriptio n]。ToString());

}



con.Close();

}





private void AddProductsToTabbedPanel()//将产品添加到标签页

{



foreach(TabCon tp in tabControl1.TabPages)

{

con.Open( );

SqlDataAdapter sda = new SqlDataAdapter(SELECT DISTINCT Description FROM TblProduct,con);

DataTable dt = new DataTable();

sda.Fill(dt);



FlowLayoutPanel flp = new FlowLayoutPanel();

flp.Dock = DockStyle.Fill;



foreach(dt.Rows中的DataRow博士)

{

按钮b =新按钮();

b.Size = new Size(100,100);

b.Text = dr [Description]。ToString();

flp.Controls.Add(b);

}



tp.Controls.Add(flp) ;

con.Close();

}





}



现在我想根据产品类型过滤每个标签页中的产品,而不是在所有标签页中显示我的数据表中的每个产品。我该怎么做?

解决方案

您可以使用DataView类的RowFilter属性。像这样: -



 DataTable tbl = GetAllProducts(); 

DataView dv = tbl.DefaultView;

// 对于标签1 [Product ='Cycle']

dv.RowFilter = Product ='Cycle';
DataTable tblCycle = dv.ToTable();

// ---------------- -----------------

// 对于标签2 [Product ='MotorCycle']

dv.RowFilter = 产品=电单车;
DataTable tblMotorCycle = dv.ToTable();

// ---------------- -----------------

/ * 对所有产品执行相同操作* /


您可以使用DataTable类的选择方法。像这样: -



 DataTable tbl = GetAllProducts(); 

// 对于标签1 [Product ='Cycle']

DataRow [] drCycle = tbl.Select( Product ='Cycle'

// --------------- ------------------

// For Tab 2 [Product ='MotorCycle']

DataRow [] drMotorCycle = tbl.Select( Product ='MotorCycle'

// ---------------------------------

/ * 对所有产品执行相同操作* /


I have a tabcontrol in a windows form and a SQL database like below.

Database[^]

Form[^]

<pre lang="c#">

private void CreateTabPages() // Create Tab Pages for each ProductType
{
con.Open();
SqlDataAdapter sda = new SqlDataAdapter("SELECT DISTINCT ProductType, Description FROM TblProductType", con);
DataTable dt = new DataTable();
sda.Fill(dt);

foreach (DataRow dr in dt.Rows)
{
tabControl1.TabPages.Add(dr["ProductType"].ToString(),dr["Description"].ToString());
}

con.Close();
}


private void AddProductsToTabbedPanel() // Add Products to Tab Pages
{

foreach (TabPage tp in tabControl1.TabPages)
{
con.Open();
SqlDataAdapter sda = new SqlDataAdapter("SELECT DISTINCT Description FROM TblProduct", con);
DataTable dt = new DataTable();
sda.Fill(dt);

FlowLayoutPanel flp = new FlowLayoutPanel();
flp.Dock = DockStyle.Fill;

foreach (DataRow dr in dt.Rows)
{
Button b = new Button();
b.Size = new Size(100, 100);
b.Text = dr["Description"].ToString();
flp.Controls.Add(b);
}

tp.Controls.Add(flp);
con.Close();
}


}

Now I want to filter products in each tabpage according to their product type, without displaying every product in my datatable in all tab pages. How do I do this?

解决方案

You can use "RowFilter" property of "DataView" Class. Like this :-

DataTable tbl = GetAllProducts();

DataView dv = tbl.DefaultView;

// For Tab 1 [Product='Cycle']

dv.RowFilter = "Product='Cycle'";
DataTable tblCycle = dv.ToTable();

//---------------------------------

// For Tab 2 [Product='MotorCycle']

dv.RowFilter = "Product='MotorCycle'";
DataTable tblMotorCycle = dv.ToTable();

//---------------------------------

/*Do same for all products you have*/


You can use "Select" method of "DataTable" Class. Like this :-

DataTable tbl = GetAllProducts();

// For Tab 1 [Product='Cycle']

DataRow[] drCycle = tbl.Select("Product='Cycle'")
 
//---------------------------------

// For Tab 2 [Product='MotorCycle']

DataRow[] drMotorCycle = tbl.Select("Product='MotorCycle'")
 
//---------------------------------

/*Do same for all products you have*/


这篇关于如何遍历数据表并过滤C#中的项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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