Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 Silverlight-从数据网格内的文本框获取更新的单元格内容值_C# 4.0_Datagrid_Silverlight 5.0 - Fatal编程技术网

C# 4.0 Silverlight-从数据网格内的文本框获取更新的单元格内容值

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

我有一个DataGrid,它有两个文本框,可以从列表中绑定

这是简单和美好的

假设用户将值“bbb”更改为123,并在此处删除记录“ccc”以刷新网格。。。此时,已更改的值将被删除!原值已绑定

我需要收集datagrid的单元格内容的当前值如何

下面是我的示例代码:

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;
}
我很高兴它解决了我的问题,但让我感到疯狂的是,没有人有兴趣分享一个想法:(