wpf datagrid 如何获取选中单元格所在行的某列的值

淡写你的回忆 2013-12-12 11:59:41
问题如题。。就是我编辑某个单元格 然后编辑好了后,再获取编辑单元格所在行的某个列的值。把这2个值合在一起组成一个数组。 大体这样子。有人知道怎么获取值么?
...全文
6623 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
淡写你的回忆 2013-12-12
  • 打赏
  • 举报
回复
引用 10 楼 KumaPower 的回复:
     <Grid>
        <DataGrid x:Name="datagrid1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="122" Width="163" SelectionUnit="Cell" SelectionMode="Single" AutoGenerateColumns="False" CellEditEnding="datagrid1_CellEditEnding">
            <DataGrid.Columns>
                <DataGridTextColumn Header="ID" Binding="{Binding ID}" IsReadOnly="True"/>
                <DataGridTextColumn Header="某些值" Binding="{Binding MyValue}"/>
            </DataGrid.Columns>
        </DataGrid>
        <TextBox x:Name="textbox1" HorizontalAlignment="Left" Height="23" Margin="10,170,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
    </Grid>
        public TestWindow()
        {
            InitializeComponent();
            Test();
        }

        private void Test()
        {
            MyTest t1 = new MyTest { ID = 1, MyValue = "qwer" };
            MyTest t2 = new MyTest { ID = 2, MyValue = "asdf" };
            MyTest t3 = new MyTest { ID = 3, MyValue = "zxcv" };
            ObservableCollection<MyTest> source = new ObservableCollection<MyTest> { t1, t2, t3 };

            this.datagrid1.ItemsSource = source;
        }

        private void datagrid1_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
            TextBox tb = e.EditingElement as TextBox;
            if (tb != null) {
                MyTest temp = e.Row.Item as MyTest;
                if (temp != null) {
                    this.textbox1.Text = tb.Text + temp.ID.ToString();
                }
            }
        }

        public class MyTest
        {
            public Int32 ID { get; set; }

            public String MyValue { get; set; }
        }
谢谢你的热心回答,从中学到不少(¯﹃¯)你真棒!
灬浪子灬 2013-12-12
  • 打赏
  • 举报
回复
单元格的tag可以绑定你的实体类 获取到cell单元格等于拿到了实体类 接下来想怎么操作就怎么操作
Bonjour-你好 2013-12-12
  • 打赏
  • 举报
回复
     <Grid>
<DataGrid x:Name="datagrid1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="122" Width="163" SelectionUnit="Cell" SelectionMode="Single" AutoGenerateColumns="False" CellEditEnding="datagrid1_CellEditEnding">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}" IsReadOnly="True"/>
<DataGridTextColumn Header="某些值" Binding="{Binding MyValue}"/>
</DataGrid.Columns>
</DataGrid>
<TextBox x:Name="textbox1" HorizontalAlignment="Left" Height="23" Margin="10,170,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
</Grid>


        public TestWindow()
{
InitializeComponent();
Test();
}

private void Test()
{
MyTest t1 = new MyTest { ID = 1, MyValue = "qwer" };
MyTest t2 = new MyTest { ID = 2, MyValue = "asdf" };
MyTest t3 = new MyTest { ID = 3, MyValue = "zxcv" };
ObservableCollection<MyTest> source = new ObservableCollection<MyTest> { t1, t2, t3 };

this.datagrid1.ItemsSource = source;
}

private void datagrid1_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
TextBox tb = e.EditingElement as TextBox;
if (tb != null) {
MyTest temp = e.Row.Item as MyTest;
if (temp != null) {
this.textbox1.Text = tb.Text + temp.ID.ToString();
}
}
}

public class MyTest
{
public Int32 ID { get; set; }

public String MyValue { get; set; }
}


淡写你的回忆 2013-12-12
  • 打赏
  • 举报
回复
引用 7 楼 KumaPower 的回复:
DataGrid.BeginningEdit 事件:http://msdn.microsoft.com/zh-cn/library/system.windows.controls.datagrid.beginningedit%28v=vs.100%29.aspx 你上面说是“编辑完后”,现在又说“编辑的瞬间”,不知你到底想怎么样。。。。。。
我就是在这个事件里面写的。。我想用e.row获取当前行。。但是后面就不知道怎么依据这个获取的行来去的第一个列值。e.row【】不被允许 好奇怪哎
淡写你的回忆 2013-12-12
  • 打赏
  • 举报
回复
引用 7 楼 KumaPower 的回复:
DataGrid.BeginningEdit 事件:http://msdn.microsoft.com/zh-cn/library/system.windows.controls.datagrid.beginningedit%28v=vs.100%29.aspx 你上面说是“编辑完后”,现在又说“编辑的瞬间”,不知你到底想怎么样。。。。。。
(*^__^*) 嘻嘻……是我表述不清。。是编辑好的瞬间。。获取到这2个值。不知道如何获取。现在能够获取列的索引。但是不能获取到当前行的第一列的值
Bonjour-你好 2013-12-12
  • 打赏
  • 举报
回复
DataGrid.BeginningEdit 事件:http://msdn.microsoft.com/zh-cn/library/system.windows.controls.datagrid.beginningedit%28v=vs.100%29.aspx 你上面说是“编辑完后”,现在又说“编辑的瞬间”,不知你到底想怎么样。。。。。。
淡写你的回忆 2013-12-12
  • 打赏
  • 举报
回复
引用 5 楼 KumaPower 的回复:
。。。我说差不多,就是只要你能获取你编辑完后的单元格,然后套用我那链接的方法,自然就找到单元格所在的行,然后对那行的所有列都可以获取其值了,再不明白,我晚上写个demo
我要触发的不是select事件 而是编辑事件,编辑单元格的瞬间 把这2个值获取到- -不知道怎么获取。目前能够获取编辑的列所在的索引。但是我想获取单元格所在行的第一个列的值。
Bonjour-你好 2013-12-12
  • 打赏
  • 举报
回复
。。。我说差不多,就是只要你能获取你编辑完后的单元格,然后套用我那链接的方法,自然就找到单元格所在的行,然后对那行的所有列都可以获取其值了,再不明白,我晚上写个demo
淡写你的回忆 2013-12-12
  • 打赏
  • 举报
回复
引用 3 楼 KumaPower 的回复:
        private void dataGrid1_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
        {
            DataGrid dg = sender as DataGrid;
            var cell = dg.CurrentCell;
            DataRowView item = cell.Item as DataRowView;
            if (item != null) {
                this.textBox1.Text = item[cell.Column.DisplayIndex].ToString();
            }
        }
跟这里的要求差不多http://bbs.csdn.net/topics/390617296
不行呀。我双击某个单元格 然后修改单元格的值后,获取我修改单元格所在行的某个列(比如列名为ID)的值。然后把这2个值(列名ID的值和我修改的单元格值)取出来。
Bonjour-你好 2013-12-12
  • 打赏
  • 举报
回复
        private void dataGrid1_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
        {
            DataGrid dg = sender as DataGrid;
            var cell = dg.CurrentCell;
            DataRowView item = cell.Item as DataRowView;
            if (item != null) {
                this.textBox1.Text = item[cell.Column.DisplayIndex].ToString();
            }
        }
跟这里的要求差不多http://bbs.csdn.net/topics/390617296
淡写你的回忆 2013-12-12
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
如果我这样做的话,我肯定是获取这个行的DataContext,然后转化成具体的实体类,再取属性值。
我是用itemsource绑定的。。并且获取这个行 怎么获取?我只是编辑了某个单元格。
exception92 2013-12-12
  • 打赏
  • 举报
回复
如果我这样做的话,我肯定是获取这个行的DataContext,然后转化成具体的实体类,再取属性值。
在Windows系统中,notepad.exe(记事本)是一个“经典的”、“简洁的”文本编辑器。这个软件,没有华丽的外观,也没有繁杂的功能,仅仅是一个文本编辑小软件。虽然经过Windows系统数十年的变换,但它却保持着永恒姿态,数十年来几乎不曾改变过。曾经,VS中的经典DEMO中,就有它的身影,一个新建的项目,就藏有一个新建的“记事本”。然而,在WPF的项目中,“记事本”却消失的无影无踪,也许是很容易实现,也许是为了革新,而不愿再传承“经典”。确实,使用WPF技术再次让“记事本”复活,确实也是一件非常容易的事情。但是,如果,使用WPF技术,再搭配当下非常流的MVVM模式呢?复活“记事本”的难度却陡然上升至很多WPF程序员为之默默叹气。而,MVVM模式是掌握WPF的最顶级技术,MVVM模式拥有的无尽的优势,让WPF相对于过往的编程模式来说,是一种革命性的创新,从而也成为大中型WPF项目中必须的模式。但,学习难度。。。。。。在这个《WPF记事本开发详解》的课程中,赵老师带领你在WPF中,从零开始一步步构建MVVM模式,直到让你亲自以WPF+MVVM的方式,让这个经典的“记事本”软件从你的手中“复活”。在课程中,赵老师会详细讲解WPF和MVVM中的各种技巧,让你从此爱上WPF+MVVM编程。

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧