首页 > 解决方案 > 如何确保在datagridview中显示类别名称而不是id?

问题描述

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

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("Запись успешно сохранена");

        }
    }
}

标签: c#winforms

解决方案


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

数据库表是根据您的问题的考虑而设计的 在此处输入图像描述 在此处输入图像描述

实体 RelationShip Diagram 使用主要的外部 RelationShip 作为 ID 到 Cost 表 categoryID 存储过程内部连接来访问两个表之间的数据。在此处输入图像描述

在此处输入图像描述 调用存储过程(使用实体数据模型)以获取 datagridview 中的数据,如下所示。

在此处输入图像描述

输出结果显示类别名称为 catName 在此处输入图像描述


推荐阅读