问题描述
我正在尝试从数据网格更新单元格值 但我不知道如何设置新的单元格值
private async void GridViewAccount_CellEditEnded(object sender,Microsoft.Toolkit.Uwp.UI.Controls.DataGridCellEditEndedEventArgs e)
{
using (sqlConnection con = new sqlConnection((App.Current as App).Connectionstring))
{
sqlCommand command = new sqlCommand("sp_updateaccount",con);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@id",accountId);
command.Parameters.AddWithValue("@username",null); //how to get the new cell value
command.Parameters.AddWithValue("@password",null); //how to get the new cell value
command.Parameters.AddWithValue("@phone",null); //how to get the new cell value
command.Parameters.AddWithValue("@role",null); //how to get the new cell value
await con.OpenAsync();
await command.ExecuteNonQueryAsync();
con.Close();
accountToolRefresh();
}
}
解决方法
首先,您需要实现双向绑定。如下:
XML 代码:
<controls:DataGrid
x:Name="MyDataGrid"
AutoGenerateColumns="False"
CellEditEnded="MyDataGrid_CellEditEnded"
ItemsSource="{x:Bind Users,Mode=TwoWay}">
<controls:DataGrid.Columns>
<controls:DataGridTextColumn Header="AccountId " Binding="{Binding Id,Mode=TwoWay}"/>
<controls:DataGridTextColumn Header="UserName" Binding="{Binding UserName,Mode=TwoWay}"/>
<controls:DataGridTextColumn Header="Password" Binding="{Binding Password,Mode=TwoWay}"/>
</controls:DataGrid.Columns>
</controls:DataGrid>
背后的代码:
public ObservableCollection<User> Users;
public MainPage()
{
this.InitializeComponent();
Users=new ObservableCollection<User>
{
new User(){Id=1,UserName=”tom”,password=”123”},new User(){Id=2,UserName=”lily”,password=”563”}
}
}
public class User:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public int _id;
public string _username;
public string _password;
public int Id
{
get { return _id; }
set {
_id = value;
RaisePropertyChanged("Id");
}
}
public string UserName
{
get { return _username; }
set
{
_username = value;
RaisePropertyChanged("UserName");
}
}
public string PassWord
{
get { return _password; }
set
{
_password = value;
RaisePropertyChanged("PassWord");
}
}
public void RaisePropertyChanged(string propertyname = null)
{
PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(propertyname));
}
}
当您更改单元格值时,Users
集合将更新。然后在CellEditEnded
事件中,你可以获取当前行的DataContext
并将其转换为一个对象,这样你就可以通过这个对象获取它的属性。
private async void MyDataGrid_CellEditEnded(object sender,DataGridCellEditEndedEventArgs e)
{
User user=e.Row.DataContext as User;
……
command.Parameters.AddWithValue("@id",user.accountId);
command.Parameters.AddWithValue("@username",user.username);
command.Parameters.AddWithValue("@password",user.password);
}