找回密码
 立即注册

QQ登录

只需一步,快速开始

suntongowen

初级会员

18

主题

65

帖子

370

积分

初级会员

积分
370

活字格认证

suntongowen
初级会员   /  发表于:2015-1-21 09:42  /   查看:14333  /  回复:16
描述一下我的问题:
我在C1DataGrid中通过RowDetailsTemplate嵌套一个C1DataGrid(两个C1DataGrid的数据源都是动态绑定的),我要实现的功能当我选中两个C1DataGrid中的任意一行或多行,点击删除按钮,选中的数据从C1DataGrid中删除,我需要把事件写到viewmodel中去而不是前台页面的cs文件,

拿上面图片再举个例子,假如我选中“四川省成都市”那一条,点击删除按钮将其删除,假如选中“李伟”,我将要删除的是“李伟”这条还有其下的“四川省成都市”和“四川省内江市”这两条记录。
我想问的是点击删除按钮时怎么将选中的记录作为参数传到viewmodel中?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

16 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-1-21 15:14:00
沙发
回复 1楼suntongowen的帖子

问题已经收到。
但不知道你是怎么样绑定数据源的,通常情况下,只要数据源发生变动,所以只需要删除绑定数据源的内容。

你也可以将Demo提供给我们,我们可以在此基础上帮助你调试下程序,看看问题出在哪里。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
suntongowen
初级会员   /  发表于:2015-1-21 16:18:00
板凳
回复 2楼Alice的帖子

我的做法是像你说的删除数据源里的相应记录,问题是我在viewmodel中获取不到明细DataGrid里光标选中的具体是哪几条记录!!!!
我绑定数据源的方法是在实体类中有“用户名”,“用户密码”,“list”三个变量,list中存放的是明细datagrid里的数据,绑定明细datagrid数据是ItemSource={binding list}。不知道这样说你能不能明白。
还有希望你们回答问题的效率提高一点,我这边真的很着急!谢谢
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-1-21 17:17:00
地板
回复 3楼suntongowen的帖子

很抱歉给你带来不好的体检。

我们论坛按照顺序回答问题,金牌用户享受优先处理的权利。
我们看到你很着急,可以尽量帮你提高在普通版块处理的速度。由于你有具体的需求,根据你的截图,你的Demo比较复杂,有主从两个DataGrid,相互之间也有数据的交互,我没有现成的例子。为了更加快速的帮助解决需求,也请你提供相关的Demo给我们,以减少制作和你一样的Demo上花费的时间,还望理解。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
suntongowen
初级会员   /  发表于:2015-1-22 09:05:00
5#
回复 4楼Alice的帖子

DEMO已经上传,删除按钮的事件是空的,我现在想选中城市名删除当前城市,选中省份名,删除其下的所有城市。
多谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-1-22 11:12:00
6#
回复 5楼suntongowen的帖子

Demo已经收到。我们已经将你的示例进入处理流程,目前正在测试Demo以及寻找解决方案中,预计今天下班前能给你反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
suntongowen
初级会员   /  发表于:2015-1-22 11:18:00
7#
回复 6楼Alice的帖子

顺便问一下其他问题,C1DataGrid的DataGridComboBoxColumn类型的列,设定为可编辑的状态,能不能手动入力数据(输入的数据在绑定的comboBox列表中不存在的)。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-1-22 15:33:00
8#
回复 5楼suntongowen的帖子

根据你的demo分析,结果如下:
涉及到C1DataGrid的功能只有一处,就是在Delete方法里通过C1DataGrid.SelectedItems获取到所有选择的项目。然后在你构建的数据源里直接将其删除。

除了这点,其他的都是属于你的业务逻辑以及MVVM的相关知识,和C1DataGrid无关。我帮你更改了代码,主要在:
1.Button的CommandParameter传入的ElementName改成C1DataGrid相关的名字“ProvinceGrid"。
2.Model里的List改成了ObservableCollection,主要是WPF平台下数据源更改后,ObservableCollection有自动的更新事件触发。

Delete事件的代码如下:
  1.    public void Delete(object obj)
  2.         {
  3.             var grid = obj as C1DataGrid;
  4.             // if single select
  5.             //var selectedProvince = grid.SelectedItem as Model;
  6.             // if mulitple select
  7.             var selectedProvinces = grid.SelectedItems.Cast<Model>().ToList();
  8.             for(var i = 0; i < selectedProvinces.Count; i++)
  9.             {
  10.                 DeleteProvince(selectedProvinces[i]);
  11.             }
  12.         }

  13.         private void DeleteCity(Model cityModel)
  14.         {
  15.             //按照DeleteProvince的思路将删除掉数据源的相关City即可
  16.         }

  17.         private void DeleteProvince(Model provinceModel)
  18.         {
  19.             //
  20.             for (var i = 0; i < provinceModel.CityList.Count; i++)
  21.             {
  22.                 DeleteCity(provinceModel.CityList[i]);
  23.             }
  24.             this.ProvinceList.Remove(provinceModel);
  25.         }
复制代码


DeleteCity的方法你可以根据我写的DeleteProvince的方法,很容易就能实现。
sample在附件里。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-1-22 15:54:00
9#
回复 7楼suntongowen的帖子

你可以更改ComboBox的IsEditable为true。
比如:
  1.   <c1:C1DataGrid.Columns>
  2.                 <c1:DataGridComboBoxColumn Header="Instrument" MinWidth="140">
  3.                     <c1:DataGridComboBoxColumn.CellEditingContentStyle>
  4.                         <Style TargetType="ComboBox">
  5.                             <Setter Property="IsEditable" Value="True"/>
  6.                         </Style>
  7.                     </c1:DataGridComboBoxColumn.CellEditingContentStyle>
  8.                 </c1:DataGridComboBoxColumn>
复制代码

或者:
  1.   <DataGrid.Columns>
  2.                     <DataGridTemplateColumn>
  3.                         <DataGridTemplateColumn.CellTemplate>
  4.                             <DataTemplate>
  5.                                 <ComboBox IsEditable="True" Text="{Binding NewItem}" ItemsSource="{Binding Sourcelist.Files}"/>
  6.                             </DataTemplate>
  7.                         </DataGridTemplateColumn.CellTemplate>
  8.                     </DataGridTemplateColumn>
  9.                 </DataGrid.Columns>
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
suntongowen
初级会员   /  发表于:2015-1-22 16:15:00
10#
回复 9楼Alice的帖子

7楼的问题我试了一下,第二段代码可以满足我的需求,谢谢!
删除按钮的问题还是没有解决,不好意思哈,不知道是你没听清还是我的表述不清楚,你给我的demo我也看了,CommandParameter传入的ElementName改成C1DataGrid相关的名字“ProvinceGrid&quot;后,如果我选中是明细DataGrid中的任意一条或多条城市名,我点击删除按钮,在ViewModel中式获取不到选中记录的,也就是说var grid = obj as C1DataGrid;这句代码的grid变量是没有数据的,所以我想只删除城市(不是选中省份删除其下所有城市)还是实现不了!麻烦再次帮忙看一下!多谢!
demo是按照你提供的代码改动后的,请调试

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部