请教 wpf关于datagrid如何获取上一行/下一行的问题

ccb8888 2014-03-21 09:42:18

<DataGrid Name="DGList2" AutoGenerateColumns="False" HorizontalGridLinesBrush="#FFDCD5D5" VerticalGridLinesBrush="#FFDCD5D5" SelectionUnit="FullRow" IsReadOnly="True" >
<DataGrid.Columns >
<DataGridTextColumn Header="ID" Visibility="Collapsed" Width="100" Binding="{Binding ID}"/>
<DataGridTextColumn Header="公共类型" Width="100" Binding="{Binding FTopName}"/>
<DataGridTemplateColumn Header="排序" Width="100*" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Image Height="23" Width="15" Grid.Column="0" Cursor="Hand" Source="/Images/up.ico" MouseLeftButtonDown="Image_MouseLeftButtonDown_1" ></Image>
<Image Height="23" Width="15" Grid.Column="1" Cursor="Hand" Source="/Images/down.ico" MouseLeftButtonDown="Image_MouseLeftButtonDown" ></Image>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>


当我点击排序按钮时,如何获取当前按钮所在行的下一行的数据或者上一行的数据
...全文
313 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
欢乐的小猪 2014-03-21
  • 打赏
  • 举报
回复
引用 7 楼 ccb8888 的回复:
[quote=引用 3 楼 hbu_pig 的回复:] DataGrid.SelectedIndex
由于没有捕捉到当前行。。所以DataGrid.SelectedIndex返回的是-1[/quote]那就index不等于-1的时候才可以上一行下一行。。
michaelbob518 2014-03-21
  • 打赏
  • 举报
回复
刚学WPF ..帮顶下..
ccb8888 2014-03-21
  • 打赏
  • 举报
回复
引用 5 楼 zhengnan2012 的回复:
取得当前的,然后再找前一行,后一行, 注意判断是否是第一行和最后一行.
思路是对。。就是代码实现可能比较麻烦!
ccb8888 2014-03-21
  • 打赏
  • 举报
回复
引用 3 楼 hbu_pig 的回复:
DataGrid.SelectedIndex
由于没有捕捉到当前行。。所以DataGrid.SelectedIndex返回的是-1
小猪八Q 2014-03-21
  • 打赏
  • 举报
回复
引用 2 楼 ccb8888 的回复:
[quote=引用 1 楼 jimil 的回复:] 说思路,代码自己找一下哈, 取得当前行号,行号+1,确定+1为数据行,取得+1数据
现在有一个难题。就是取得当前行号的难题,由于我是直接点击那个向上或向下按钮,DataGrid没有捕捉到选中的行。[/quote] 一种方法是在image为tag属性绑定当前行的数据{Binding},在事件中通过该数据,获取其在数据集合中的索引 第二种方法是通过HitTest,通过命中测试,找到对应对象
zhengnan2012 2014-03-21
  • 打赏
  • 举报
回复
取得当前的,然后再找前一行,后一行, 注意判断是否是第一行和最后一行.
jimil 2014-03-21
  • 打赏
  • 举报
回复
添加 CommandArgument="<%# ((GridViewRow) Container).RowIndex %> 取得 int i = Convert.ToInt32(e.CommandArgument.ToString());//得到行号
欢乐的小猪 2014-03-21
  • 打赏
  • 举报
回复
DataGrid.SelectedIndex
ccb8888 2014-03-21
  • 打赏
  • 举报
回复
引用 1 楼 jimil 的回复:
说思路,代码自己找一下哈, 取得当前行号,行号+1,确定+1为数据行,取得+1数据
现在有一个难题。就是取得当前行号的难题,由于我是直接点击那个向上或向下按钮,DataGrid没有捕捉到选中的行。
jimil 2014-03-21
  • 打赏
  • 举报
回复
说思路,代码自己找一下哈, 取得当前行号,行号+1,确定+1为数据行,取得+1数据
ccb8888 2014-03-21
  • 打赏
  • 举报
回复
上面代码多写了一句没用的。。重新粘贴

private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var currentObj = (Model.YCommonTypeList)((Image)sender).DataContext;
            var dgList = (List<Model.YCommonTypeList>)DGList2.ItemsSource;
            int curIdex = dgList.IndexOf(currentObj);
            if (curIdex == 0) {
                MessageBox.Show("当前是第一行,操作失败");
                return;
            }
            var otherObj = (Model.YCommonTypeList)DGList2.Items[curIdex - 1];
            var temp = otherObj.FOrder;            
            otherObj.FOrder = currentObj.FOrder;
            currentObj.FOrder = temp;
            bllCMT.Update(otherObj);            
            bllCMT.Update(currentObj);            
            DataBind();
            
        }
ccb8888 2014-03-21
  • 打赏
  • 举报
回复
终于找到解决方法,共享一下:主要思路都是通过找index来实现!

private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var currentObj = (Model.YCommonTypeList)((Image)sender).DataContext;
            var dgList = (List<Model.YCommonTypeList>)DGList2.ItemsSource;
            int curIdex = dgList.IndexOf(currentObj);
            if (curIdex == 0) {
                MessageBox.Show("当前是第一行,操作失败");
                return;
            }
            var otherObj = (Model.YCommonTypeList)DGList2.Items[curIdex - 1];
            var temp = otherObj.FOrder;
            var otherOrder = otherObj.FOrder;            
            otherObj.FOrder = currentObj.FOrder;
            currentObj.FOrder = temp;
            bllCMT.Update(otherObj);            
            bllCMT.Update(currentObj);            
            DataBind();
            
        }

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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