C# 从Datagrid文本框读取数据
我有一个Datagrid,其中有3列,两列的值从数据库中获取并填充,而第三列是一个文本框,用户在其中输入值。我必须将该值保存到数据库中。我在这里面临一些问题。 当我在UI中输入值时,它在后台代码中显示为null。我做错了什么C# 从Datagrid文本框读取数据,c#,wpf,C#,Wpf,我有一个Datagrid,其中有3列,两列的值从数据库中获取并填充,而第三列是一个文本框,用户在其中输入值。我必须将该值保存到数据库中。我在这里面临一些问题。 当我在UI中输入值时,它在后台代码中显示为null。我做错了什么 <DataGrid AutoGenerateColumns="False" Height="233" Name="dataGrid1" Width="360" > <DataGrid.Columns> <DataGri
<DataGrid AutoGenerateColumns="False" Height="233" Name="dataGrid1" Width="360" >
<DataGrid.Columns>
<DataGridTextColumn Header="x" Binding="{Binding Path=x}" Width="120" IsReadOnly="True" />
<DataGridTextColumn Header="y" Binding="{Binding Path=y}" Width="120" IsReadOnly="True"/>
<DataGridTextColumn Header="Value/Ref" Width="120" Binding="{Binding Path=z, Mode=TwoWay}" IsReadOnly="False" />
</DataGrid.Columns>
我有一个包含变量x,y,z的类。我正在创建一个类列表,并尝试使用您的XAML代码和这个简单的代码片段将值添加到类中,其行为就像您想要的(我理解的):
A类
{
私有字符串x,y,z;
公共字符串x{get{return}set{{UEX=value;}}
公共字符串y{get{return{uy;}set{{uy=value;}}
公共字符串z{get{return}set{{UE z=value;}}
}
公共部分类主窗口:窗口
{
私有列表数据;
公共主窗口()
{
初始化组件();
myData=新列表();
添加(新的A(){x=“x1”,y=“y1”});
添加(新的A(){x=“x2”,y=“y2”});
添加(新的A(){x=“x3”,y=“y3”});
dataGrid1.ItemsSource=myData;
}
}
如果您在Value/Ref列中键入任何数据,后面的列表肯定会更新。您是否尝试过
Binding=“{Binding Path=z,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}”
?是的,但它不起作用:(z属性上的setter被调用了吗?您能发布相关代码吗?包含x、y和z的对象看起来如何?Xvalue=((System.Data.DataRowView)(((DataGridRow)dataGrid1.ItemContainerGenerator.ContainerFromIndex(i)).Item)).Row.ItemArray[0].ToString();这就是我读取y和z的值的方式。x,y,z是添加到列表中的字符串。我仍然看不到公开x,y和z属性的对象的定义绑定到3列的IE?是类还是结构?使用该代码和其他相关内容更新您的问题
class A
{
private string _x, _y, _z;
public string x { get { return _x; } set { _x = value; } }
public string y { get { return _y; } set { _y = value; } }
public string z { get { return _z; } set { _z = value; } }
}
public partial class MainWindow : Window
{
private List<A> myData;
public MainWindow()
{
InitializeComponent();
myData = new List<A>();
myData.Add(new A() { x = "x1", y = "y1" });
myData.Add(new A() { x = "x2", y = "y2" });
myData.Add(new A() { x = "x3", y = "y3" });
dataGrid1.ItemsSource = myData;
}
}