微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何更新 UWP Microsoft Toolkit DataGrid 中的单元格值?

如何解决如何更新 UWP Microsoft Toolkit DataGrid 中的单元格值?

我正在尝试从数据网格更新单元格值 但我不知道如何设置新的单元格值

    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);     
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?