首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

silverlight中怎么获取datagrid中选择的行,

2012-12-30 
silverlight中怎样获取datagrid中选择的行,急!!!我在silverlight中使用了datagrid控件,在它的模板列中放置

silverlight中怎样获取datagrid中选择的行,急!!!
我在silverlight中使用了datagrid控件,在它的模板列中放置了一个HyperlinkButton控件,当点击某一个单元格中的HyperlinkButton控件时,我想获取该单元格所在的行和列的索引,请问怎么获取啊?
[解决办法]
还是重复一下在别的回贴中说过的内容,希望大家别嫌啰嗦:
1. 按照 MVVM 的思想,在 ListBox 和 DataGrid 中并不建议直接去访问用于绑定显示的控件,能通过 DataContext 的Model 去访问的,尽量通过 Model 去解决。
如楼主说的模板列中有 HyperlinkButton ,那么通过 其Click事件,


private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
{
    Model.XXXEntity dataItem = ((HyperlinkButton)sender).GetBindingExpression(HyperlinkButton.ContentProperty).DataItem as Model.XXXEntity ;
    // 针对 dataItem 进行行的统计操作  
}



2. 如果1的方法实在不能解决问题,或者太过于麻烦,那么才采用访问控件的方法。对此 DataGrid 提供了
DataGridColumn.GetCellContent()
DataGridRow.GetRowContainingElement()  
等方法来获取单元格中的控件、 DataGridRow 。


[解决办法]
前几个回贴里的,链接里的写得不是挺好的吗?
grid.SelectedItems 是当前选中行的实体…… 

/// <summary>
        /// 获取datagrid当前选中的单元格数据
        /// 如果绑定的数据源为实体的话默认选中的当前记录为一条实体
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgcate_CurrentCellChanged(object sender, EventArgs e)
        {
            DataGrid grid = sender as DataGrid;      
            BookService.Book book = (BookService.Book)grid.SelectedItems[0];//获取当前选中的行数据并转换为对应的实体
            MessageBox.Show(book.Title.ToString());      //打印该实体对应的属性值
        }
[解决办法]
如果是多选,可以这样的:
        /// <summary>
       /// 获取已选择的列表
        /// </summary>
        public List<SampleInfo> samples
        {
            get
            {
                List<SampleInfo> saplst = new List<SampleInfo>();
                for (int i = 0; i < dg_Samples.SelectedItems.Count; i++)
                {
                    saplst.Add(dg_Samples.SelectedItems[i] as SampleInfo);
                }
                return saplst;


            }
        }

热点排行