我创建了一个DataGridView控件来列出一些内容。但是,我想根据textBox中的条件将特定的行放在一起(不要将所有行放到一行中)。
谢谢!
代码如下:
DataTable table = new DataTable();
private void Form1_Load(object sender, EventArgs e)
{
// populate dgv from datatable
// add columns
table.Columns.Add("Number", typeof(int));
table.Columns.Add("Food", typeof(string));
// add rows
table.Rows.Add(1, "BBQ");
table.Rows.Add(2, "Pear");
table.Rows.Add(3, "Eggs");
table.Rows.Add(4, "Banana");
table.Rows.Add(5, "Noodle");
table.Rows.Add(6, "Orange");
table.Rows.Add(7, "Mango");
table.Rows.Add(8, "Beef");
dataGridView1.DataSource = table;
}
private void Button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "Fruit" )
{
}
}
例如,当我在文本框中键入“水果”时。从第一行开始,所有包含一种水果的行将自动彼此对齐:
在文本框中键入单词“ Meat”时,其余包含肉类的行也是如此。
答案 0 :(得分:0)
您可以使用DataView.RowFilter
属性来过滤行。但是,您需要根据该列来进行过滤。
在您的情况下,您没有任何包含“水果,肉类”的食品,因此我再添加一种食品。 (如果您不想显示此列,我们可以将其隐藏)。
public partial class Form1 : Form
{
DataTable table = new DataTable();
public Form1()
{
InitializeComponent();
table.Columns.Add("Number", typeof(int));
table.Columns.Add("Food", typeof(string));
table.Columns.Add("FoodType", typeof(string));
// add rows
table.Rows.Add(1, "BBQ", "Meat");
table.Rows.Add(2, "Pear","Fruit");
table.Rows.Add(3, "Eggs", "Eggs");
table.Rows.Add(4, "Banana", "Fruit");
table.Rows.Add(5, "Noodle","Veg");
table.Rows.Add(6, "Orange", "Fruit");
table.Rows.Add(7, "Mango", "Fruit");
table.Rows.Add(8, "Beef","Meat");
dataGridView1.DataSource = table;
//hide the foodtype column
this.dataGridView1.Columns["FoodType"].Visible = false;
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text != "")
{
DataView dv = new DataView(table, "FoodType= '" + textBox1.Text + "'", "FoodType Desc", DataViewRowState.CurrentRows);
dataGridView1.DataSource = dv;
}
else
dataGridView1.DataSource = table;
}
}
值是基于文本框值的过滤器。如果再次想要所有值,则仅输入空白文本框,然后单击按钮。