Chciałem napisać program który pobiera bazę danych SQL do DataGridView i umożliwić użytkownikowi edycji komórek:
public partial class Form1 : Form
{
string connectionString;
SqlCommand commandString;
SqlConnection myConnection;
DataTable dt;
SqlDataAdapter dataAdapter;
string ciag1, ciag2, ciag3;
int a, b;
public Form1()
{
InitializeComponent();
connectionString = "Data Source = EUREKA-PC; Initial Catalog = Wydzialy; trusted_connection = yes";
button2.Enabled = false;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
commandString = new SqlCommand();
commandString.CommandText = "Select * from widok";
myConnection = new SqlConnection(connectionString);
commandString.Connection = myConnection;
dataAdapter = new SqlDataAdapter(commandString.CommandText,myConnection);
commandString.Connection.Open();
dt = new DataTable();
dataAdapter.Fill(dt);
dataGridView1.DataSource = dt;
commandString.Connection.Close();
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
a = dataGridView1.SelectedCells[0].ColumnIndex;
b = dataGridView1.SelectedCells[0].RowIndex;
button2.Enabled = true;
}
private void button2_Click(object sender, EventArgs e)
{
if (a != 3)
{
ciag1 = dataGridView1.Columns[a].HeaderText;
ciag2 = (b + 1).ToString();
if (textBox1.Text != string.Empty)
{
ciag3 = textBox1.Text;
commandString.CommandText = String.Format("update Student SET {0}='{1}' where idStudent={2}", ciag1, ciag3, ciag2);
commandString.Connection.Open();
dataAdapter.SelectCommand = commandString;
commandString.CommandText = "Select * from widok";
dataAdapter.SelectCommand = commandString;
DataTable dt = new DataTable();
dataAdapter.Fill(dt);
dataGridView1.DataSource = dt;
commandString.Connection.Close();
}
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
}
W bazie danych utworzyłem 3 tabele: studentów, prowadzących i nazwy wydziałów. Następnie wpisałem komendę:
create view widok as select Student.idStudent, Student.Imię, Student.Nazwisko, Wydzial.[Nazwa wydziału] from Student join Wydzial on student.idWydzial = Wydzial.idWydzial
dzięki czemu mam “widok” gdzie mam idstudenta, imię nazwisko oraz pełną nazwę wydziału, do którego należy ten student. W programie trzeba najpierw kliknąć na button1. Dzięki temu program pobiera dane z bazy danych i wyświetla w DataGridView. Następnie, trzeba zaznaczyć pole, ktore chcemy edytować i uaktywnia się button2. W polu textbox1 trzeba wpisać nowy ciąg, który chcemy, aby się pojawił w tej komórce. Po kliknięciu na button2, program ma uaktualnić zawartość komórki. Niestety, po kliknięciu na button2 nic mi się nie zmienia. Cokolwiek bym wpisał w textbox1 i tak zawartość komórki pozostaje taka sama. Chciałem to zrobić za pomocą
commandString.CommandText = String.Format("update Student SET {0}='{1}' where idStudent={2}", ciag1, ciag3, ciag2);
jeżeli wpiszę w SQL Management Studio np.
update Student SET Imie='Jakub' where idStudent=8
to program zmienia mi zawartość komórki, a z poziomu C# tak nie działa. Czemu tak się dzieje?