【问题标题】:How to ensure that name of category is displayed rather than id in datagridview? [duplicate]如何确保在datagridview中显示类别名称而不是id? [复制]
【发布时间】:2018-07-28 23:31:19
【问题描述】:

Hey Guys 需要您对我尝试开发的 windows 窗体应用程序的帮助,也就是说,我有一个绑定到类别表并正确显示类别名称的组合框,但是当提交新记录时,只有 Id类别显示在 datagridview 中,但我想确保显示类别的名称而不是 Id。看下图我需要将 int(id of category) 更改为 string(name of category) The Picture 下面是我到目前为止的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Entity;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ТестовоеЗадание.DAL;

namespace ТестовоеЗадание
{
    public partial class РасходыForm : Form
    {

        private DatabaseEntities db = new DatabaseEntities();
        Расходы model = new Расходы();

        public РасходыForm()
        {
            InitializeComponent();

        }

        private void Расходы_Load(object sender, EventArgs e)
        {
            PopulateComboboxWithDataGrid();

        }
       void PopulateComboboxWithDataGrid()
        {
            dataGridView1.DataSource = db.Расходы.ToList();
            cbxCategory.DataSource = db.КатегорииЗатрат.ToList();
            cbxCategory.ValueMember = "Id";
            cbxCategory.DisplayMember = "Наименование";


        }


        private void btnCancel_Click(object sender, EventArgs e)
        {

        }


        private void btnDelete_Click(object sender, EventArgs e)
        {

            if (MessageBox.Show("Уверены что хотите удалить эту категорию?", "Удаление", MessageBoxButtons.YesNo) == DialogResult.Yes)

            {
                {
                    var entry = db.Entry(model);
                    if (entry.State == EntityState.Detached)

                        db.Расходы.Attach(model);
                    db.Расходы.Remove(model);
                    db.SaveChanges();

                    MessageBox.Show("Запись была удалена");

                }
            }
                }

        private void btnCreate_Click(object sender, EventArgs e)
        {
            model.Период = dtp.Value;
            model.Стоимость = decimal.Parse(tbxCost.Text);
            model.КатегорииЗатратId =(int)(cbxCategory.SelectedValue);
            model.Комментарий = tbxComments.Text;
            db.Расходы.Add(model);
           db.SaveChanges();
            MessageBox.Show("Запись успешно сохранена");

        }
    }
}

【问题讨论】:

  • 您必须在 datagridview 或组合框中显示类别名称吗?请写详细
  • @ershoaib 嗨!感谢您的关注,我需要在 datagridview 中显示类别名称
  • 您的db.Расходы.ToList(); 是否提供了表格中的所有列,请检查一下? bcoz datagridview 显示dataGridView1.DataSource中提供的所有列
  • @ershoaib 是的,它显示了数据库中的所有数据,请查看我上面附上的图片。只需点击“图片”链接

标签: c# winforms


【解决方案1】:

根据您的问题,您必须使用实体关系作为 categoryId 的外键,并使用内部联接或联接查询来访问两个表中的数据。这样您就可以从类别表中查看类别名称在 Datagridview 中,我使用带有内部连接的存储过程来解决您的问题,如下所示。检查工作和测试结果显示给您。

数据库表是根据您的问题的考虑而设计的

实体关系图 使用主要的外部 RelationShip 作为 ID 到 Cost 表 categoryID 存储过程内连接来访问两个表之间的数据。

调用存储过程(使用实体数据模型)获取datagridview中的数据如下。

输出结果将类别名称显示为 catName

【讨论】:

  • @mir 433 请接受回答
  • 感谢您的关注和回复,但是否有解决方案,只需说 datagridview 显示字符串值而不是 int 值
  • 使用内部连接查找存储过程并将 catName 显示为字符串而不是 int catID。或者通过将 int 值作为参数传递来创建另一个用于获取字符串的存储过程。
猜你喜欢
  • 2021-12-20
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 2015-02-16
  • 2013-02-17
  • 2012-09-18
相关资源
最近更新 更多