Winforms 如何检查所选行在DataGridView中的类别
我已经用google/stackoverflow搜索了一段时间,但我找不到问题的正确答案。 我必须在VS Windows窗体(.net Framework)中创建简单的程序。我创建了几个DataGridView,其中显示了我需要的确切数据。我将按钮添加到“添加”以创建新行,或“删除”所选行。现在我需要通过单击一个按钮来更改所选行中的数据。 当我单击“添加”按钮时,新对话框窗口弹出,您可以从子类Car或Motorbike中进行选择,然后当您选择要添加的内容时,新对话框将弹出,并在那里填写适当的信息(如制造商或创建年份等) 当我想“编辑”所选行时,我希望应用程序直接进入对话框,在那里您可以将数据更改为新数据。我认为简单的“如果”可以很容易地帮助我,但我找不到创建它的代码。 我的想法是这样的:Winforms 如何检查所选行在DataGridView中的类别,winforms,if-statement,datagridview,Winforms,If Statement,Datagridview,我已经用google/stackoverflow搜索了一段时间,但我找不到问题的正确答案。 我必须在VS Windows窗体(.net Framework)中创建简单的程序。我创建了几个DataGridView,其中显示了我需要的确切数据。我将按钮添加到“添加”以创建新行,或“删除”所选行。现在我需要通过单击一个按钮来更改所选行中的数据。 当我单击“添加”按钮时,新对话框窗口弹出,您可以从子类Car或Motorbike中进行选择,然后当您选择要添加的内容时,新对话框将弹出,并在那里填写适当的信息
F1Automobil f1 = new F1Automobil();
F1Motorka f2 = new F1Motorka();
int indCar = dgvVozovyPark.CurrentCell.RowIndex;
if (/*index of selected row where subclass equals to "automobil" = true)
{
{
f1.Action = F1Automobil.ActionType.Edit;
f1.CarInstance = (Automobil)dgvVozovyPark.CurrentRow.DataBoundItem;
f1.ShowDialog();
}
else
{
f2.Action = F1Motorka.ActionType.Edit;
f2.BikeInstance = (Motorka)dgvVozovyPark.CurrentRow.DataBoundItem;
f2.ShowDialog();
}
}
但是VS显示了几个错误。谁能帮帮我,因为我不知道该怎么办。我尝试了很多组合,比如数据库.Equals(something)=true
,但都不起作用
编辑:这里是具有已定义子类的基类
namespace Semestrální_projekt___Půjčovna_vozidel
{
[Serializable()]
public class Vozidla
{
public string Vyrobce { get; set; }
public string Model { get; set; }
public int RokVyroby { get; set; }
public int CenaVypujcky { get; set; }
public int CenaProdejni { get; set; }
public Vozidla(string vyrobce, string model, int rokVyroby, int cenaVypujcky, int cenaProdejni)
{
Vyrobce = vyrobce;
Model = model;
RokVyroby = rokVyroby;
CenaVypujcky = cenaVypujcky;
CenaProdejni = cenaProdejni;
}
}
[Serializable()]
public class Motorka: Vozidla
{
public int Kubatura { get; set; }
public string Typ { get; set; }
public Motorka(string vyrobce, string model, int rokVyroby, int cenaVypujcky, int cenaProdejni, int kubatura, string typ)
:base (vyrobce, model, rokVyroby, cenaVypujcky, cenaProdejni)
{
Kubatura = kubatura;
Typ = typ;
}
}
[Serializable()]
public class Automobil: Vozidla
{
public int ObsahMotoru { get; set; }
public string Typ { get; set; }
public string Prevodovka { get; set; }
public int PocetMistSezeni { get; set; }
public Automobil(string vyrobce, string model, int rokVyroby, int cenaVypujcky, int cenaProdejni, int obsahMotoru, string typ, string prevodovka,int pocetMistSezeni)
:base(vyrobce, model, rokVyroby, cenaVypujcky, cenaProdejni)
{
ObsahMotoru = obsahMotoru;
Typ = typ;
Prevodovka = prevodovka;
PocetMistSezeni = pocetMistSezeni;
}
}
}
这可能会有帮助
if (dgvVozovyPark.SelectedRows.Count > 0) {
try {
Vozidla vehicle = (Vozidla)dgvVozovyPark.SelectedRows[0].DataBoundItem;
string className = vehicle.GetType().Name;
if (className.Equals("Automobil")) {
Automobil selectedAuto = (Automobil)vehicle;
MessageBox.Show("Open Automobil instance : " + selectedAuto.ToString());
}
else {
if (className.Equals("Motorka")) {
Motorka selectedMotor = (Motorka)vehicle;
MessageBox.Show("Open Motorka instance : " + selectedMotor.ToString());
}
else {
// unknown class
}
}
}
catch (Exception ex) {
MessageBox.Show("Grid cast Error: " + ex.Message);
}
}
如果有人想查看帮助,我将从@JohnG复制并粘贴答案: 这可能会有帮助
if (dgvVozovyPark.SelectedRows.Count > 0) {
try {
Vozidla vehicle = (Vozidla)dgvVozovyPark.SelectedRows[0].DataBoundItem;
string className = vehicle.GetType().Name;
if (className.Equals("Automobil")) {
Automobil selectedAuto = (Automobil)vehicle;
MessageBox.Show("Open Automobil instance : " + selectedAuto.ToString());
}
else {
if (className.Equals("Motorka")) {
Motorka selectedMotor = (Motorka)vehicle;
MessageBox.Show("Open Motorka instance : " + selectedMotor.ToString());
}
else {
// unknown class
}
}
}
catch (Exception ex) {
MessageBox.Show("Grid cast Error: " + ex.Message);
}
}
在一所没有与老师“交流”能力的学校入学听起来很奇怪。你是如何分配任务的?如果您使用的是
DataGridView
,您是否有理由不让用户通过编辑单个单元格“直接”编辑网格中的数据?目前还不清楚您对“如果”声明有什么问题<代码>如果(grid.CurrentCell.Value.ToString()==“automobile”){…}?1)感谢链接到MS帮助。我看过那些页面,但我没有发现它们有用。2) 是的,我可以通过电子邮件问老师,但他有很多来自“每日”项目的学生,我的下一次团队会议将在一个月左右后举行,你们将讨论大部分已完成的项目。3) 我在DGV中选择的是整行,如果单击“编辑”,所有数据都将加载到该对话框窗口,您将在其中更改它们。DGV显示的是整个类别的“车辆”,而不是一辆车一辆,自行车一辆。此外,DGV显示了更多的列,因此单独更改每个网格会很痛苦。3.1)我有一个名为Vehicles的类,其中有两个子类:Cars、Bikes。DGV显示“绑定列表”中列出的所有车辆。我的“if”语句必须检查,如果选择的带有“Vehicle”的行是“Car”或“Bike”的子类,然后决定将弹出哪个对话框窗口。我对“Customer”DGV有这样的选项,但我没有此列表的子类,因此创建新/编辑按钮“非常容易”,因为“如果单击此按钮,则创建新客户,如果单击此按钮,则编辑他”