gpt4 book ai didi

c# - 在单个数据 GridView 中显示来自相关表的数据

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:50 25 4
gpt4 key购买 nike

我在数据库中有一些表:

Items             Manufacturers       Categories      Cities      Regions
============== ================ ============ ======== ==========
ItemId ManufacturerId CategoryId CityId RegionId
ManufacturerId CityId NameCategory RegionId NameRegion
CategoryId NameManufacturer NameCity
NameItem
Weight

我正在使用以下代码显示 DataGridView 中的项目列表:

DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter("select * from Items", connectionString);

SqlCommandBuilder cmdBldr = new SqlCommandBuilder(da);
da.Fill(ds, "Items");
dataGridView1.DataSource = ds.Tables[0];

我还有一个按钮可以使用以下代码保存 DataGridView 中的更改:

da.Update(ds, "Items");

我想用相关的 NameManufacturerNameCategory 替换 datagridview 中的两列 - ManufacturerIdCategoryId表。因此,这两列应该是包含相关表中所有可能名称的 ComboBox - 以便能够将 CategoryManufacturer 更改为其他列并使用 da.Update() 保存它。

我还需要为数据 GridView 添加三个组合框过滤器:CategoryCityRegion,将根据这些过滤器中的选定值过滤 datagridview 中显示的项目。

我不能使用 wizard creator,我必须在代码中完成所有操作。如果您能给我一些与此任何部分相关的想法,那就太好了。

最佳答案

组合框列

对于你想成为组合框的每一列,你应该创建一个DataGridViewComboBoxColumn的实例。并设置这些属性并将其添加到网格的 Columns 中:

  • DataSource:要在组合框中显示的项目列表
  • DataPropertyName:网格数据源属性的名称,您希望组合框绑定(bind)到它。
  • DisplayMember:要在组合框中显示的组合框数据源的一列名称
  • ValueMember:组合框数据源列的名称,当您从组合框中选择一个项目时使用它的值。

例如,这里是 CategoryId 列的代码:

var categoryAdapter= new SqlDataAdapter("SELECT * FROM Categories", connectionString);
var categoryTable= new DataTable();
categoryAdapter.Fill(categoryTable);

var categoryComboBoxColumn=new DataGridViewComboBoxColumn();
categoryComboBoxColumn.Name="categoryComboBoxColumn";
categoryComboBoxColumn.HeaderText="Category";
categoryComboBoxColumn.DataSource = categoryTable;
categoryComboBoxColumn.DataPropertyName = "CategoryId";
categoryComboBoxColumn.DisplayMember= "NameCategory";
categoryComboBoxColumn.DisplayMember= "CategoryId";
this.dataGridView1.Columns.Add(categoryComboBoxColumn);

过滤器

要过滤网格,您可以分配 expression到主数据表的 DefaultView.RowFilter

例如,要根据 CategoryId 进行过滤,您可以创建一个 System.Windows.Forms.ComboBox 控件并将其命名为 categoryComboBox并将其绑定(bind)到类别以显示类别列表并将其 DisplayMember 设置为 NameCategory 并将其 ValueMember 设置为 CategoryId该组合框,然后:

var table = ((DataTable)dataGridView1.DataSource);
table.DefaultView.RowFilter =
string.Format("CategoryId = {0}", categoryComboBox.SelectedValue);

您可以通过将过滤器设置为 null 或空来重置过滤器。

您还可以使用和/或创建表达式:

var criterias = new List<string>();
if(categoryComboBox.SelectedIndex > 0)
criterias.Add(string.Format("CategoryId = {0}", categoryComboBox.SelectedValue);

if(cityComboBox.SelectedIndex > 0)
criterias.Add(string.Format("CityId = {0}", cityComboBox.SelectedValue);

var table = ((DataTable)dataGridView1.DataSource);
table.DefaultView.RowFilter = string.Join(" And " , criterias);

关于c# - 在单个数据 GridView 中显示来自相关表的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33574438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com