C# 4.0 Silverlight-从数据网格内的文本框获取更新的单元格内容值
我有一个DataGrid,它有两个文本框,可以从列表中绑定 这是简单和美好的 假设用户将值“bbb”更改为123,并在此处删除记录“ccc”以刷新网格。。。此时,已更改的值将被删除!原值已绑定 我需要收集datagrid的单元格内容的当前值如何 下面是我的示例代码:C# 4.0 Silverlight-从数据网格内的文本框获取更新的单元格内容值,c#-4.0,datagrid,silverlight-5.0,C# 4.0,Datagrid,Silverlight 5.0,我有一个DataGrid,它有两个文本框,可以从列表中绑定 这是简单和美好的 假设用户将值“bbb”更改为123,并在此处删除记录“ccc”以刷新网格。。。此时,已更改的值将被删除!原值已绑定 我需要收集datagrid的单元格内容的当前值如何 下面是我的示例代码: MainPage.XAML <UserControl x:Class="SampleDataGridApplication.MainPage" xmlns="http://schemas.microsoft.com
MainPage.XAML
<UserControl x:Class="SampleDataGridApplication.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="600" d:DesignWidth="400" Loaded="UserControl_Loaded" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
<Grid x:Name="LayoutRoot" Background="White">
<Border Name="bdAddUsersCSVButtons" Width="380" Height="40" Canvas.Top="60" Margin="12,530,8,30">
<Canvas Width="Auto" Height="Auto">
<Button Content="Remove" Height="30" Width="100" HorizontalAlignment="Left" Name="btnRemove" Canvas.Left="150" Canvas.Top="5" Cursor="Hand"
FontFamily="Lucida Grande" FontSize="13" FontStyle="Normal" FontWeight="Bold" VerticalAlignment="Top" Click="btnRemove_Click" />
<Button Content="Reset" Height="30" Width="100" Name="btnReset" HorizontalAlignment="Left" Canvas.Left="280" Canvas.Top="5" VerticalAlignment="Top" Cursor="Hand"
FontFamily="Lucida Grande" FontSize="13" FontStyle="Normal" FontWeight="Bold" Click="btnReset_Click" />
</Canvas>
</Border>
<sdk:DataGrid AutoGenerateColumns="False" Height="500" HorizontalAlignment="Left" Margin="10,10,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="380" >
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn CanUserResize="False" Header="" Width="30" CanUserReorder="False">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="chboxUser" IsChecked="False" VerticalAlignment="Center" Padding="0,15,0,0" Width="20" Height="20" CommandParameter="{Binding EmailID}" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn CanUserResize="False" Header="FirstName" Width="100" CanUserReorder="False" IsReadOnly="True">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Name="txtFirstName" FontFamily="Lucida Grande" Width="80" Height="22" Foreground="#666666" FontSize="9" FontStyle="Normal" Margin="0,3,0,0" TabIndex="0"
FontWeight="Normal" Text="{Binding FirstName}"></TextBox>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn CanUserResize="False" Header="EmailID" Width="245" CanUserReorder="False" IsReadOnly="True">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Name="txtEmailID" FontFamily="Lucida Grande" Width="80" Height="22" Foreground="#666666" FontSize="9" FontStyle="Normal" Margin="0,3,0,0" TabIndex="0"
FontWeight="Normal" Text="{Binding EmailID}"></TextBox>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</Grid>
</UserControl>
MainPage.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace SampleDataGridApplication
{
public partial class MainPage : UserControl
{
List<Users> _lstUsers = new List<Users>();
public MainPage()
{
InitializeComponent();
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
GenerateList();
LoadValues();
}
private void LoadValues()
{
dataGrid1.ItemsSource = _lstUsers;
}
private void GenerateList()
{
_lstUsers = new List<Users>
{
new Users { FirstName="aaa", EmailID="aaa@gmail.com" },
new Users { FirstName="bbb", EmailID="bbb@gmail.com" },
new Users { FirstName="ccc", EmailID="ccc@gmail.com" },
new Users { FirstName="ddd", EmailID="ddd@gmail.com" },
new Users { FirstName="eee", EmailID="eee@gmail.com" },
new Users { FirstName="fff", EmailID="fff@gmail.com" },
new Users { FirstName="ggg", EmailID="ggg@gmail.com" },
new Users { FirstName="hhh", EmailID="hhh@gmail.com" },
};
}
private void btnRemove_Click(object sender, RoutedEventArgs e)
{
List<Users> _lstTemp = dataGrid1.ItemsSource as List<Users>;
//Here i'm reading the DataGrid Values; i need to collect current values of the records how?
foreach (Users _RowValue in dataGrid1.ItemsSource)
{
CheckBox _CheckBox = dataGrid1.Columns[0].GetCellContent(_RowValue) as CheckBox;
if (_CheckBox.IsChecked == true)
{
_lstTemp = (from value in _lstTemp.Where(Item=> Item.EmailID!= _CheckBox.CommandParameter.ToString()) select value).ToList();
}
}
dataGrid1.ItemsSource = null;
dataGrid1.ItemsSource = _lstTemp;
}
private void btnReset_Click(object sender, RoutedEventArgs e)
{
dataGrid1.ItemsSource = null;
LoadValues();
}
public class Users
{
public string FirstName { get; set; }
public string EmailID { get; set; }
}
}
}
MainPage.XAML
MainPage.xaml.cs
使用制度;
使用System.Collections.Generic;
使用System.Linq;
Net系统;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Animation;
使用System.Windows.Shapes;
命名空间SampleDataGridApplication
{
公共部分类主页面:UserControl
{
列表lstUsers=新列表();
公共主页()
{
初始化组件();
}
已加载私有void UserControl_(对象发送方,RoutedEventArgs e)
{
生成论者();
LoadValues();
}
私有void LoadValues()
{
dataGrid1.ItemsSource=lstUsers;
}
私有无效生成列表()
{
_lstUsers=新列表
{
新用户{FirstName=“aaa”,EmailID=”aaa@gmail.com" },
新用户{FirstName=“bbb”,EmailID=”bbb@gmail.com" },
新用户{FirstName=“ccc”,EmailID=”ccc@gmail.com" },
新用户{FirstName=“ddd”,EmailID=”ddd@gmail.com" },
新用户{FirstName=“eee”,EmailID=”eee@gmail.com" },
新用户{FirstName=“fff”,EmailID=”fff@gmail.com" },
新用户{FirstName=“ggg”,EmailID=”ggg@gmail.com" },
新用户{FirstName=“hhh”,EmailID=”hhh@gmail.com" },
};
}
私有void btnRemove_单击(对象发送者,路由目标)
{
列表lstemp=dataGrid1.ItemsSource作为列表;
//在这里,我正在读取DataGrid值;我需要收集记录的当前值如何?
foreach(用户_dataGrid1.ItemsSource中的行值)
{
CheckBox _CheckBox=dataGrid1.Columns[0].GetCellContent(_RowValue)作为复选框;
如果(_CheckBox.IsChecked==true)
{
_lstemp=(从_lstemp.Where(Item=>Item.EmailID!=\u CheckBox.CommandParameter.ToString())中的值选择值)。ToList();
}
}
dataGrid1.ItemsSource=null;
dataGrid1.ItemsSource=\u lstTemp;
}
私有void btnReset_单击(对象发送方,路由目标)
{
dataGrid1.ItemsSource=null;
LoadValues();
}
公共类用户
{
公共字符串名{get;set;}
公共字符串EmailID{get;set;}
}
}
}
我终于得到了答案
在该文本框中添加一个密钥更新事件
在代码隐藏中:
private void txtFirstName_KeyUp(object sender, KeyEventArgs e)
{
List<Users> _lstTemp = dataGrid1.ItemsSource as List<Users>;
var selectedrow = dataGrid1.SelectedItem as Users;
TextBox _TextFirstName = dataGrid1.Columns[1].GetCellContent(selectedrow) as TextBox;
(from value in _lstTemp
where value.EmailID == selectedrow.EmailID
select value).ToList().ForEach(value => value.FirstName = _TextFirstName.Text);
dataGrid1.ItemsSource = _lstTemp;
}
private void txtFirstName\u KeyUp(对象发送方,KeyEventArgs e)
{
列表lstemp=dataGrid1.ItemsSource作为列表;
var selectedrow=dataGrid1.SelectedItem作为用户;
TextBox _TextFirstName=dataGrid1.Columns[1].GetCellContent(selectedrow)作为TextBox;
(来自lstemp中的值)
其中value.EmailID==selectedrow.EmailID
选择value).ToList().ForEach(value=>value.FirstName=\u TextFirstName.Text);
dataGrid1.ItemsSource=\u lstTemp;
}
我很高兴它解决了我的问题,但让我感到疯狂的是,没有人有兴趣分享一个想法:(