C # Zastąp domyślne pole tekstowe w DataGridView za pomocą Combobox
Nadal jestem całkiem nowy w C #, ale pracuję nad aplikacją WinForm, która pobiera dane z bazy danych Access. Obecnie pracuję nad formularzem, który ładuje zawartość z tabeli dynamicznie do DataGridView za pomocą DataAdapter i DataSet.
Jak dotąd formularz działa zgodnie z oczekiwaniami. Obecnie, aby dodać nowy rekord, musisz wpisać dane do każdej komórki z rzędu. Chcę tylko zastąpić kilka kolumn (pole tekstowe) comboboxem. Innymi słowy, zamiast ręcznie wprowadzać dane, należy rozwinąć listę rozwijaną i wybrać wpis z listy. Chcę także wygenerować elementy danych combobox z SQL, ale jeśli to za dużo, mogę po prostu ręcznie kodować każdy element.
Mogę dodać combobox do datagridview w czasie wykonywania, ale to nie jest to, co próbuję zrobić. A ponieważ kolumny są tworzone w czasie wykonywania za pomocą kodu, nie jestem pewien, jak zmodyfikować kolumnę zgodnie z tą metodą.
Na przykład chcę zamienić komórki tekstowe na „Rating” na elementy combobox, takie jak „R”, „PG-13”, „PG” itp.
public partial class frmBulkInsert : Form
{
OleDbConnection conn;
OleDbDataAdapter da;
DataSet ds;
OleDbCommandBuilder cmdbl;
public frmBulkInsert()
{
InitializeComponent();
}
private void frmBulkInsert_Load_1(object sender, EventArgs e)
{
// Load all records from the table into the datagridview.
try
{
dataConnectionSettings();
}
catch (Exception ex)
{
MessageBox.Show("Error\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
private void ConnectToDatabase()
{
conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\ronniejones.JONES\Documents\Access Projects\Movie_2013.mdb";
}
private void btnUpdateRecords_Click(object sender, EventArgs e)
{
try
{
//DataSet changes = (ds).GetChanges();
cmdbl = new OleDbCommandBuilder(da);
//da.Update(ds, "Movie_2013");
int numRows = da.Update(ds, "Movie_2013");
MessageBox.Show(numRows + " Record(s) Updated", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void dataConnectionSettings()
{
//DataGridViewComboBoxColumn cboColumn;
conn = new OleDbConnection();
ConnectToDatabase();
conn.Open();
da = new OleDbDataAdapter("SELECT ID, Title, [Minutes], Rating, Category, Format, Actor1, Actor2, Actor3, Actor4, [Status] FROM [Movies] ORDER BY ID", conn);
ds = new DataSet();
da.Fill(ds, "Movie_2013");
dataGridView1.DataSource = ds.Tables[0];