似乎在DataGriView中管理您的ID似乎有些棘手。
当您要手动设置列时,您可能需要考虑设置每列的DataPropertyName
属性。完成此操作后,您可以将您的DatabaseModels直接绑定到Grids DataSource。
这将使从选定行中读取ID变得容易。
这是一个简单的示例:
CREATE TABLE exampleEntity
(
[Id] int not null PRIMARY KEY IDENTITY(1,1),[SomeValue] int not null,[SomeString] varchar(max) null
);
INSERT INTO exampleEntity ([SomeValue],[SomeString])
VALUES
(42,'String21ß'),(35,'asdadkpq3eß0i'),(37,''),(24,null),(17,'laksjdadjqpwdp')
;
从这个简单的数据库中,我从数据库EF模型中建立了代码优先的支架。
然后只需设置您的DataGridView(向每列添加DataPropertyName
)
public Form1()
{
InitializeComponent();
this.dt.AutoGenerateColumns = false;
this.dt.MultiSelect = false;
this.dt.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
//Id column
this.dt.Columns.Add(new DataGridViewTextBoxColumn()
{
DataPropertyName = "Id",//Name of database column
Name = "Id",//Display name of datagrid column
Visible = false
});
//SomeValue Column
this.dt.Columns.Add(new DataGridViewTextBoxColumn()
{
DataPropertyName = "SomeValue",Name = "Value"
});
//SomeString Column
this.dt.Columns.Add(new DataGridViewTextBoxColumn()
{
DataPropertyName = "SomeString",Name = "String"
});
}
然后要加载数据,您现在可以使用DataBinding:
private void Form1_Load(object sender,EventArgs e) => this.dt.DataSource = new ExampleModel().exampleEntities.ToList();
现在从所选项目中读取ID非常简单:
private void Button1_Click(object sender,EventArgs e)
{
//Read id from selected item
int idSelectedItem = (this.dt.SelectedRows[0].DataBoundItem as exampleEntity).Id;
using (ExampleModel ctxt = new ExampleModel())
{
exampleEntity entity = ctxt.exampleEntities.Find(idSelectedItem);
entity.SomeValue += 42;
ctxt.SaveChanges();
}
}
重要提示,如果您重用了用于填充DataGridView的相同上下文,则可以避免在读取所选项目时打开另一个上下文。
本文链接:https://www.f2er.com/3167842.html