找回密码
 立即注册

QQ登录

只需一步,快速开始

gaoge00

论坛元老

14

主题

58

帖子

1万

积分

论坛元老

积分
10186

活字格认证

gaoge00
论坛元老   /  发表于:2013-4-2 13:11  /   查看:21444  /  回复:25
请问WPF Spread中能不能像以前版本那样将一列类型设置成按钮,或者CheckBox

25 个回复

倒序浏览
Zoe
银牌会员   /  发表于:2013-4-2 14:43:00
沙发
回复 1楼gaoge00的帖子

目前产品暂不支持这个功能,不过有一个替代方案:
  1. public partial class MainPage : UserControl
  2.     {
  3.         public MainPage()
  4.         {
  5.             InitializeComponent();
  6.             this.gcSpreadSheet1.Sheets.Clear();
  7.             this.gcSpreadSheet1.Sheets.Add(new MyWorksheet() { RowCount = 10, ColumnCount = 8, DefaultColumnWidth = 100, DefaultRowHeight = 28 });
  8.             var sheet = this.gcSpreadSheet1.ActiveSheet;
  9.             sheet.SetValue(0, 0, "General");
  10.             sheet.SetValue(0, 1, "TextBox");
  11.             sheet.SetValue(0, 2, "Slider");
  12.             sheet.SetValue(0, 3, "DatePicker");
  13.             sheet.SetValue(0, 4, "CheckBox");
  14.             sheet.SetValue(0, 5, "ProgressBar");
  15.             sheet.SetValue(0, 6, "ComboBox");
  16.             sheet.SetValue(0, 7, "Button");
  17.             for (var i = 1; i < 10; i++)
  18.             {
  19.                 sheet.SetValue(i, 2, i);
  20.                 sheet.SetValue(i, 3, DateTime.Now + TimeSpan.FromDays(i * 365));
  21.                 sheet.SetValue(i, 4, i % 2 == 0 ? true : false);
  22.                 sheet.SetValue(i, 5, i);
  23.                 sheet.SetValue(i, 6, i % 3);
  24.             }
  25.             var sheet1 = this.gcSpreadSheet1.ActiveSheet as MyWorksheet;
  26.             if (sheet != null)
  27.             {
  28.                 sheet1.DrawingObjectVisible = true;
  29.                 this.gcSpreadSheet1.InvalidateRange(-1, -1, -1, -1);
  30.             }
  31.         }
  32.     }
  33.     public class ControlDrawingObject : CustomDrawingObject
  34.     {
  35.         private Control _rootElement;
  36.         public ControlDrawingObject(int row, int col, Control control) : base(row, col) { _rootElement = control; this.ShowDrawingObjectOnly = true; }
  37.         public override FrameworkElement RootElement
  38.         {
  39.             get { _rootElement.Margin = new Thickness(1); return _rootElement; }
  40.         }
  41.     }
  42.     public class MyWorksheet : Worksheet
  43.     {
  44.         public bool DrawingObjectVisible { get; set; }
  45.         public override DrawingObject[] GetDrawingObject(int row, int column, int rowCount, int columnCount)
  46.         {
  47.             if (row == 0 || !this.DrawingObjectVisible) return base.GetDrawingObject(row, column, rowCount, columnCount);
  48.             DrawingObject dobj;
  49.             if (column == 7)
  50.             {
  51.                 dobj = new ControlDrawingObject(row, column, new Button() { Content = "Delete" });
  52.             }
  53.             else if (column == 6)
  54.             {
  55.                 int value = -1;
  56.                 object obj = this.GetValue(row, column);
  57.                 if (obj != null)
  58.                 {
  59.                     if (obj is int) value = (int)obj;
  60.                     else
  61.                     {
  62.                         int.TryParse(obj.ToString(), out value);
  63.                     }
  64.                     if (value > 2) value = -1;
  65.                 }
  66.                 ComboBox control = new ComboBox();
  67.                 control.Items.Add("Fruit");
  68.                 control.Items.Add("Vegetable");
  69.                 control.Items.Add("Food");
  70.                 if (value >= -1 &amp;&amp; value < control.Items.Count)
  71.                     control.SelectedIndex = value;
  72.                 control.SelectionChanged += delegate(object sender, SelectionChangedEventArgs e)
  73.                 {
  74.                     this.SetValue(row, column, control.SelectedIndex);
  75.                 };
  76.                 dobj = new ControlDrawingObject(row, column, control);
  77.             }
  78.             else if (column == 5)
  79.             {
  80.                 double value = 0;
  81.                 object obj = this.GetValue(row, column);
  82.                 if (obj != null)
  83.                 {
  84.                     if (obj is double) value = (double)obj;
  85.                     else if (obj is int) value = (int)obj;
  86.                     else
  87.                     {
  88.                         double.TryParse(obj.ToString(), out value);
  89.                     }
  90.                 }
  91.                 dobj = new ControlDrawingObject(row, column, new ProgressBar() { Value = value, Maximum = 10 });
  92.             }
  93.             else if (column == 4)
  94.             {
  95.                 bool value = false;
  96.                 object obj = this.GetValue(row, column);
  97.                 if (obj != null)
  98.                 {
  99.                     if (obj is bool) value = (bool)obj;
  100.                     else
  101.                     {
  102.                         bool.TryParse(obj.ToString(), out value);
  103.                     }
  104.                 }
  105.                 CheckBox control = new CheckBox() { IsChecked = value, Content = "Check Me" };
  106.                 control.Checked += delegate(object sender, RoutedEventArgs e)
  107.                 {
  108.                     this.SetValue(row, column, control.IsChecked);
  109.                 };
  110.                 control.Unchecked += delegate(object sender, RoutedEventArgs e)
  111.                 {
  112.                     this.SetValue(row, column, control.IsChecked);
  113.                 };
  114.                 dobj = new ControlDrawingObject(row, column, control);
  115.             }
  116.             else if (column == 3)
  117.             {
  118.                 DateTime? value = null;
  119.                 object obj = this.GetValue(row, column);
  120.                 if (obj != null)
  121.                 {
  122.                     if (obj is DateTime) value = (DateTime)obj;
  123.                     else
  124.                     {
  125.                         DateTime date;
  126.                         if (DateTime.TryParse(obj.ToString(), out date))
  127.                         {
  128.                             value = date;
  129.                         }
  130.                     }
  131.                 }
  132.                 DatePicker control = new DatePicker() { SelectedDate = value };
  133.                 control.LostFocus += delegate(object sender, RoutedEventArgs e)
  134.                 {
  135.                     this.SetValue(row, column, control.SelectedDate);
  136.                 };
  137.                 dobj = new ControlDrawingObject(row, column, control);
  138.             }
  139.             else if (column == 2)
  140.             {
  141.                 double value = 0;
  142.                 object obj = this.GetValue(row, column);
  143.                 if (obj != null)
  144.                 {
  145.                     if (obj is double) value = (double)obj;
  146.                     else if (obj is int) value = (int)obj;
  147.                     else
  148.                     {
  149.                         double.TryParse(obj.ToString(), out value);
  150.                     }
  151.                 }
  152.                 Slider control = new Slider() { Value = value, Maximum = 10 };
  153.                 control.LostFocus += delegate(object sender, RoutedEventArgs e)
  154.                 {
  155.                     this.SetValue(row, column, control.Value);
  156.                 };
  157.                 dobj = new ControlDrawingObject(row, column, control);
  158.             }
  159.             else if (column == 1)
  160.             {
  161.                 string value = this.GetText(row, column);
  162.                 TextBox control = new TextBox() { Text = value };
  163.                 control.LostFocus += delegate(object sender, RoutedEventArgs e)
  164.                 {
  165.                     this.SetValue(row, column, control.Text);
  166.                 };
  167.                 dobj = new ControlDrawingObject(row, column, control);
  168.             }
  169.             else
  170.             {
  171.                 return base.GetDrawingObject(row, column, rowCount, columnCount);
  172.             }
  173.             return new DrawingObject[] { dobj };
  174.         }
  175.     }
复制代码
回复 使用道具 举报
gaoge00
论坛元老   /  发表于:2013-4-2 15:19:00
板凳
回复 2楼Zoe的帖子

谢谢,  表头的文字能不能竖着显示?

这个我自己想办法解决了,把这列设置成自动折行,然后在列头文字中添加\r\n换行,好在我这些列的下面都是CheckBox,如果不是的话这个方法就不能实现了,不然下面表中的文字也换行了。。。
回复 使用道具 举报
Zoe
银牌会员   /  发表于:2013-4-2 16:21:00
地板
你可以设置文字是否要换行。如果把WordWrap 设置成false, 就不会换行了。

问题解决了就好。
回复 使用道具 举报
gaoge00
论坛元老   /  发表于:2013-4-2 16:23:00
5#
回复 4楼Zoe的帖子

哈哈, 我发现我的问题好多,  现在有个 回车跳格的问题,
以前的是这样写的,现在的就不会了。。
InputMap im;
im = ospd.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused);
im.Put(new FarPoint.Win.Spread.Keystroke(Keys.Enter, Keys.None), FarPoint.Win.Spread.SpreadActions.MoveToNextColumnWrap);
im = ospd.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenFocused);
im.Put(new FarPoint.Win.Spread.Keystroke(Keys.Enter, Keys.None), FarPoint.Win.Spread.SpreadActions.MoveToNextColumnWrap);
回复 使用道具 举报
Zoe
银牌会员   /  发表于:2013-4-2 17:20:00
6#
  1.             this.gcSpreadSheet1.View.KeyMap.Remove(new KeyStroke(Key.Enter, ModifierKeys.None));
  2.             this.gcSpreadSheet1.View.KeyMap.Add(new KeyStroke(Key.Enter, ModifierKeys.None), SpreadActions.NavigationNext);
复制代码
回复 使用道具 举报
gaoge00
论坛元老   /  发表于:2013-4-2 18:23:00
7#
回复 2楼Zoe的帖子

您好,又麻烦您了, 这种方式的实现  可不可以写成 spd.ActiveSheet.Columns.XX=new Text();  这种形式,因为有些列我还要用原有的类型, 不这样的话很可能整个表都需要重新来定义。。
回复 使用道具 举报
Zoe
银牌会员   /  发表于:2013-4-3 10:01:00
8#
产品目前不支持这个功能,可能需要重新定义了。在后续版本的开发中,我们会考虑添加这个功能。
回复 使用道具 举报
gaoge00
论坛元老   /  发表于:2013-4-3 10:25:00
9#
回复 8楼Zoe的帖子

谢谢,希望推出新的版本
现在有个问题 如果我New一个Control类型就可以绑定到该列
但是如果我用穿过来的Control 却只能绑定在这一列的最后,请问这是什么原因?
这是New的  正常
Button btnDelete = new Button() { Content = &quot;Delete&quot; };
这是我传过来的 Control 只有最后一行能绑定上
Button btnDelete = listControl[column].MyControlType as Button;
--------------------------------------------------------------------------------------
下面正常
dobj = new ControlDrawingObject(row, column, btnDelete);
return new DrawingObject[] { dobj };


………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
追加询问:
现有的列类型 如何限制长度以及录入的类型?
回复 使用道具 举报
Zoe
银牌会员   /  发表于:2013-4-3 11:22:00
10#
抱歉,您说的这个问题,能否提供简单的demo 方便我们找出问题。
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部