c#自动将值设置为DataRow [英] c# Set value to a DataRow automatically
问题描述
我想做的是,如果更改了单元格编号3,则更改行的第四个单元格的值.我的网格有一个EditEnding方法.这是我下面的方法.我真的不知道如何完成
What I want to do is to change value of row's forth cell if cell number 3 is changed. I have an EditEnding method for my grid. That's my method below. I don't really know how to finish it
这是网格定义:
<DataGrid x:Name="dataGrid1"... CellEditEnding="dataGrid1_EditEnding">
和方法:
private void dataGrid1_EditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
// initializing DataRowView from my datagrid
DataRowView drv = (DataRowView)dataGrid1.CurrentItem;
// checking if there were any changes
if (drv.Row[3, DataRowVersion.Original] != drv.Row[3])
{
//set value to cell
}
}
推荐答案
好吧,我做了我的工作,只是忘了在这里发布.
Well, i did my stuff, just forget to post it here.
首先,我是通过EditEnding事件来完成的,它看起来像这样:
First I did it with EditEnding event, it looked like that:
private void dataGrid1_EditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
DataRowView drv = (DataRowView)dataGrid1.CurrentItem;
if (drv.Row[3, DataRowVersion.Original] != drv.Row[3])
{
rowView.Row.SetField(4, /* my logic here */);
}
}
问题在于它仅在第二次编辑时才添加值.然后我改变了主意,并向我的DataTable添加了RowChanged事件,就像这样:
The problem was it was adding the value only on second edit. Then I changed my idea and added a RowChanged event to my DataTable, which was like that:
static void dtSP_RowChanged(object sender, DataRowChangeEventArgs e)
{
bool temp = false;
try
{
temp = e.Row[4, DataRowVersion.Original] == e.Row[4];
}
catch { }
if (temp && int.Parse(e.Row[3].ToString()) != -1)
{
e.Row[4] = (/* my logic */);
}
}
该方法正进入无限循环(注意,第四行已更改).
The method was going into infinity loop (it was noticing, that fourth row had changed).
然后我看到了: http://www.windowsdevcenter.com/pub/a/dotnet/2003/05/26/datacolumn_expressions.html
我已经以一行长代码结束了:
I've ended with one line long code:
dtSP.Columns[4].Expression = "expression";
@blindmeis,我忘了提及我使用ADO.NET的情况,对不起
@blindmeis, I forgott to mention I use ADO.NET, sorry
这篇关于c#自动将值设置为DataRow的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!