我有DatagridView
包含学生信息,包括班级,年龄等。现在我想创建一个ComboBox,它具有过滤哪个类的功能(例如,如果我在组合框上选择类IIA,{{ 1}}只显示来自IIA类的学生。
以下是表单中的代码,用于从datagridview
加载数据:
objectbindingsource
这是组合框的代码:
private void frmdbSiswa_Load(object sender, EventArgs e)
{
db = new SiswaSMSEntities();
tabelSiswaBindingSource.DataSource = db.Tabel_Siswa.ToList();
agamaSiswaBindingSource.DataSource = db.Agama_Siswa.ToList();
kelasBindingSource.DataSource = db.Kelas.ToList();
jenisKelaminBindingSource.DataSource = db.Jenis_Kelamin.ToList();
dataGridViewSiswa.DataSource = db.Tabel_Siswa.ToList();//to show the datagridview
cboKelas.DataSource = db.Kelas.ToList();//combobox
}
我还将组合框绑定到数据源。 我在这方面工作了几个小时。我是编程新手,所以如果我问一个非常基本的问题,请原谅我。
问题是,当我运行代码时,它会过滤数据,但是当我选择类IA时,datagridview什么都不显示,当我选择IB类时,datagridview显示来自IA类的学生,依此类推。当我在show private void cboKelas_SelectionChangeCommitted(object sender, EventArgs e)
{
dataGridViewSiswa.DataSource = db.Tabel_Siswa.Where(x => x.IdKelas == cboKelas.SelectedIndex).ToList();
}
上选择datagridview,combobox时。
答案 0 :(得分:0)
在组合框选择更改事件后,将数据网格视图RowFilter属性设置为选定值:
dv.RowFilter = "YourColumnName = ComboBoxSelectedValue";
使用类似问题/解决方案[{3}}
更新此问题答案 1 :(得分:0)
在页面加载中重新启动此Add!IsPostBack
Private Sub Sheet1()
AutoPostBack = True
If (Cells(2, 1).Value = "---") And (Cells(1, 2).Value = 0) Then
Cells(2, 2).Value = 0
Else
Cells(2, 2).Value = " "
End If
End Sub
答案 2 :(得分:0)
你能这样试试吗?
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
dataGridView1.ColumnCount = 3;
dataGridView1.Columns[0].Name = "Product ID";
dataGridView1.Columns[1].Name = "Product Name";
dataGridView1.Columns[2].Name = "Product Price";
string[] row = new string[] { "1", "Product 1", "1000" };
dataGridView1.Rows.Add(row);
row = new string[] { "2", "Product 2", "2000" };
dataGridView1.Rows.Add(row);
row = new string[] { "3", "Product 3", "3000" };
dataGridView1.Rows.Add(row);
row = new string[] { "4", "Product 4", "4000" };
dataGridView1.Rows.Add(row);
DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();
cmb.HeaderText = "Select Data";
cmb.Name = "cmb";
cmb.MaxDropDownItems = 4;
cmb.Items.Add("True");
cmb.Items.Add("False");
dataGridView1.Columns.Add(cmb);
}
}
}
如果您还有其他问题,请回复。
http://csharp.net-informations.com/datagridview/csharp-datagridview-combobox.htm
答案 3 :(得分:0)
除非你绝对需要List<T>
作为DataSource
网格,否则我建议您使用DataTable
作为DataSource
网格。这可能会让事情变得更轻松,看起来您可能已经拥有DataTable
来自db.Tabel_Siswa.ToList()
的{{1}},这似乎是从表格中制作一个列表。
如上所述,下面是使用组合框使用DataTable
和DataView
过滤网格中数据的示例。这是一个简单的表单,其中包含空DataGridView
和空ComboBox
。全局DataTable
变量gridTable
用作网格的DataSource
。全局DataView
变量dv
用于“过滤/取消过滤”gridTable
。
表单加载后,列和一些测试数据会添加到gridTable
。然后gridTable
被设置为网格的DataSource
。最后,ComboBox
填充了“A类,B类”等项目......“无过滤器”选项添加到组合框中,以允许用户删除应用的过滤器。
当用户更改组合框选择时,会创建一个新的DataView
,并将RowFilter
设置为组合框中的选定值。最后,DataView
dv
被设置为网格的DataSource
以显示已过滤的结果
DataTable gridTable;
DataView dv;
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
gridTable = GetTable();
FillTable(gridTable);
dataGridView1.DataSource = gridTable;
SetComboBox();
}
private void SetComboBox() {
comboBox1.Items.Add("No Filter");
comboBox1.Items.Add("Class A");
comboBox1.Items.Add("Class B");
comboBox1.Items.Add("Class C");
comboBox1.SelectedIndex = 0;
}
private DataTable GetTable() {
DataTable dt = new DataTable();
dt.Columns.Add("FName", typeof(string));
dt.Columns.Add("LName", typeof(string));
dt.Columns.Add("Class", typeof(string));
return dt;
}
private void FillTable(DataTable dt) {
for (int i = 1; i < 5; i++) {
dt.Rows.Add("FName" + i, "LName" + i, "Class A");
dt.Rows.Add("FName" + i, "LName" + i, "Class B");
dt.Rows.Add("Class" + i, "Class" + i, "Class C");
}
}
RowFilter
字符串... dv.RowFilter = "Class = '" + comboBox1.Text + "'"
表示过滤以使名为“Class”的列中的单元格等于组合框中的文本。示例:“Class = Class B”。这意味着DataSource
的列名称与过滤字符串中的内容“匹配”。
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {
dv = new DataView(gridTable);
if (comboBox1.Text == "No Filter")
dv.RowFilter = "";
else
dv.RowFilter = "Class = '" + comboBox1.Text + "'";
dataGridView1.DataSource = dv;
}
希望这有帮助。