Здравствуйте, я изучаю С#, и у меня есть небольшое сомнение, у меня есть массив, содержащий объекты класса гитары и подкласса фортепиано, и форма с dataGridView1, но когда я делаю dataGridView1.DataSource = my_array
только данные появляется класс гитары.
Вот мои классы
class guitar
{
private string make;
private string model;
private int year;
public guitar(string Make, string Model, int Year)
{
make = Make;
model = Model;
year = Year;
}
public string Make
{
get { return make; }
set { make = value; }
}
public string Model
{
get { return model; }
set { model = value; }
}
public int Year
{
get { return year; }
set { year = value; }
}
}
Подкласс пианино
class piano : guitar
{
private int numKeys;
public piano(int NumKeys, string Make, string Model, int Year) :base (Make,Model,Year)
{
numKeys = NumKeys;
}
public int NumKeys
{
get { return numKeys; }
set { numKeys = value; }
}
}
Моя форма
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
guitar[] my_array = new guitar[6];
private void Form1_Load(object sender, EventArgs e)
{
my_array[0] = new guitar("Gibson", "Les Paul", 1958);
my_array[1] = new guitar("Fender", "Jazz Bass", 1964);
my_array[2] = new guitar("Guild", "Bluesbird", 1971);
my_array[3] = new piano(50, "Josh", "Yellowbird", 2011);
my_array[4] = new piano(10, "Albert", "Redbird", 9992);
my_array[5] = new piano(20, "John", "Pinkbird", 1234);
dataGridView1.DataSource = my_array;
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
}
Как заставить dataGridView1 отображать значения класса гитары и подкласса фортепиано, используя мой массив?
Примечание. Я использую vs2015.
2 ответа
Попробуйте изменить класс источника данных на подкласс наиболее подробных столбцов. Например, измените класс piano
на Instrument
, добавьте поле InstrumentType
и установите тип массива на Instrument
:
class Instrument : guitar
{
public InstrumentType InstrumentType;
private int? numKeys;
public Instrument(InstrumentType instrumentType, int? NumKeys, string Make, string Model, int Year) : base(Make, Model, Year)
{
InstrumentType = instrumentType;
numKeys = NumKeys;
}
public int? NumKeys
{
get { return numKeys; }
set { numKeys = value; }
}
}
public enum InstrumentType
{
Piano,
Guitar
}
// form
Instrument[] my_array = new Instrument[6];
private void Form1_Load(object sender, EventArgs e)
{
my_array[0] = new Instrument(InstrumentType.Guitar, null, "Gibson", "Les Paul", 1958);
my_array[1] = new Instrument(InstrumentType.Guitar, null, "Fender", "Jazz Bass", 1964);
my_array[2] = new Instrument(InstrumentType.Guitar, null, "Guild", "Bluesbird", 1971);
my_array[3] = new Instrument(InstrumentType.Piano, 50, "Josh", "Yellowbird", 2011);
my_array[4] = new Instrument(InstrumentType.Piano, 10, "Albert", "Redbird", 9992);
my_array[5] = new Instrument(InstrumentType.Piano, 20, "John", "Pinkbird", 1234);
dataGridView1.DataSource = my_array;
}
Попробуйте DataTable:
DataTable dt = new DataTable("Guitars");
dt.Columns.Add("Make", typeof(string));
dt.Columns.Add("Model", typeof(string));
dt.Columns.Add("Year", typeof(int));
dt.Rows.Add(new object[] {"Gibson", "Les Paul", 1958});
dt.Rows.Add(new object[] {"Fender", "Jazz Bass", 1964});
dt.Rows.Add(new object[] {"Guild", "Bluesbird", 1971});
dataGridView1.DataSource = dt;
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.
class StringedInstrument
, который, возможно, получает свои основные свойства, такие как make и name, из базыMusicalInstrument
, а затем StringedInstrument добавляет такие свойства, какNumberOfStrings
..