попробуйте сделать мою первую программу на c #, с vs2010 и структурой сущностей.
Это код:
public partial class Form1 : Form
{
ValinorEntities ve = new ValinorEntities();
public Form1()
{
InitializeComponent();
comboBox1.DataSource = ve.item_groups;
comboBox1.DisplayMember = "item_group_name";
comboBox1.ValueMember = "item_group_id";
var departmentQuery = from d in ve.items
from g in ve.item_groups
where d.item_group_id_fk == g.item_group_id
select new { d.item_name, g.item_group_name, d.item_id, d.item_number };
dataGridView1.DataSource = departmentQuery;
dataGridView1.Columns[2].Visible = false;
dataGridView1.Columns[3].Visible = false;
}
private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
textBox2.Text = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();
textBox3.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
comboBox1.DataSource = ve.item_groups;
comboBox1.DisplayMember = "item_group_name";
comboBox1.ValueMember = "item_group_id";
}
private void btn_New_Click(object sender, EventArgs e)
{
try
{
item item = new Valinor.item();
item.item_name = textBox1.Text;
item.item_number = textBox2.Text;
item.item_group_id_fk = (int)comboBox1.SelectedValue;
ve.AddToitems(item);
ve.SaveChanges();
MessageBox.Show("Insert successful");
}
catch (Exception ex)
{
MessageBox.Show("Insert failed" + ex);
}
}
private void btn_Save_Click(object sender, EventArgs e)
{
try
{
var id = Convert.ToInt32(textBox3.Text);
item c = ve.items.FirstOrDefault(i => i.item_id == id);
c.item_name = textBox1.Text;
c.item_number = textBox2.Text;
c.item_group_id_fk = (int)comboBox1.SelectedValue;
ve.SaveChanges();
MessageBox.Show("Save successful");
}
catch (Exception ex)
{
MessageBox.Show("Save failed" + ex);
}
}
}
Это работает, но у меня есть несколько проблем.
- Что я должен написать
comboBox1.SelectedValue
, чтобы правильный элемент был выбран после нажатия на ячейку?
В функции btnSave_Click
значение textbox3
относится к идентификатору, что не очень элегантное решение. Как я могу возразить, чтобы заменить его?
Если мне известны такие ссылки, такие как:
textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
textBox2.Text = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();
можно было бы как-то избежать.
Для этого, однако, zakell, что dataGridView1_CellMouseClick
fügvénynél ссылается не на значение ячейки, а также объекта. Это можно решить?