gpt4 book ai didi

c# - 带有适配器和组合框的 DataGridView

转载 作者:行者123 更新时间:2023-11-29 13:54:57 24 4
gpt4 key购买 nike

如果我将 DataGridView(dgv) 绑定(bind)到适配器,则 d​​gv 会自动填充表的内容。然而,其中一列现在显示为文本,我想将其更改为组合框。

此代码准备一个数据适配器:

MySqlDataAdapter awardsAdapter, spendingsAdapter;
DataSet cachedData = new DataSet();
MySqlDataAdapter PrepareSpendingsAdapter() {
try {
MySqlDataAdapter adapter;
adapter = new MySqlDataAdapter("select * from spendings", connection);
adapter.TableMappings.Add("Table", "spendings");

adapter.UpdateCommand = new MySqlCommand(
"UPDATE spendings SET category=@category, points=@points WHERE id=@id;",
connection);
adapter.UpdateCommand.Parameters.Add("@id", MySqlDbType.Int32, 10, "ID");
adapter.UpdateCommand.Parameters.Add("@category", MySqlDbType.Int32, 10, "Category");
adapter.UpdateCommand.Parameters.Add("@points", MySqlDbType.Int32, 10, "Points");
adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;

adapter.InsertCommand = new MySqlCommand(
"INSERT INTO spendings VALUES (@id,@category,@points);",
connection);
adapter.InsertCommand.Parameters.Add("@id", MySqlDbType.Int32, 10, "ID");
adapter.InsertCommand.Parameters.Add("@category", MySqlDbType.Int32, 10, "Category");
adapter.InsertCommand.Parameters.Add("@points", MySqlDbType.Int32, 10, "Points");
adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None;

adapter.DeleteCommand = new MySqlCommand(
"DELETE FROM spendings WHERE id=@id;", connection);
adapter.DeleteCommand.Parameters.Add("@id", MySqlDbType.Int32, 10, "ID");
adapter.DeleteCommand.UpdatedRowSource = UpdateRowSource.None;

return adapter;
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
return null;
}

此代码添加了一个额外的列,其中包含我需要的信息

DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();
MySqlDataAdapter adapterSpendCategory = new MySqlDataAdapter("select category,details from spendcategory", connection);
adapterSpendCategory.TableMappings.Add("Table", "spendcategory");
adapterSpendCategory.Fill(cachedData);
cmb.DataSource = cachedData.Tables["spendcategory"];
cmb.DisplayMember = "details";
cmb.ValueMember = "category";
//Put the missing piece of the puzzle here

此代码填充 DataGridView:

spendingsAdapter = PrepareSpendingsAdapter();
spendingsAdapter.Fill(cachedData);
dgvPointsSpent.DataSource = cachedData.Tables["spendings"];

我不想添加这个额外的列,而是希望类别列发生变化并且看起来像额外的列

enter image description here

最佳答案

如果您使用设计器添加数据 GridView 并选择它,您将看到一些属性的小箭头。您通常使用它来将 datagridview 绑定(bind)到绑定(bind)源。您还可以使用箭头来“编辑列”。对于每个列,您可以选择是否必须显示、数据的显示顺序和方式(作为文本?作为组合框?作为数字?)。

因此,如果您已经成功添加了适合您需要的组合框列,您所要做的就是转到“编辑列”,选择您不想看到的列,然后将其从列表中删除datagridview 中的 columnhs,或使用该列的属性使其不可见。

通常您不会添加额外的列,而是更改属性,使其显示组合框而不是文本。

关于c# - 带有适配器和组合框的 DataGridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16012980/

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