找回密码
 立即注册

QQ登录

只需一步,快速开始

zj_wind

中级会员

11

主题

31

帖子

824

积分

中级会员

积分
824

活字格认证

zj_wind
中级会员   /  发表于:2011-6-30 20:26  /   查看:7002  /  回复:2
在使用multirow的combobox控件时有个问题,想请教一下。

在选中combobox时,在下拉列表中表示下面3条数据
101 北京 通州
102 天津 河西
103 上海 浦东

在选中某一条数据的时候,焦点离开,combobox的格子中,只表示code的值。
例如选中第一条的时候,就表示101
但是,现在无论如何选择,都是表示“101 北京 通州”这样的数据

2 个回复

倒序浏览
robert
金牌服务用户   /  发表于:2011-7-2 15:19:00
沙发
非常抱歉,MultiRow没有提供简单的属性设置来满足您的需求。
我尝试使用处理CellPainting事件的办法来达到您需求的效果,希望可以满足您的需求。
请尝试以下代码。

以下是C#代码,如需VB代码请参考3楼代码

  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             // 给MultiRow指定带有Combo的模板。
  4.             ComboBoxCell combo = new ComboBoxCell();
  5.             combo.Items.Add("101 北京 通州");
  6.             combo.Items.Add("102 天津 河西");
  7.             combo.Items.Add("103 上海 浦东");
  8.             combo.Name = "Combo1";
  9.             this.gcMultiRow.Template = Template.CreateGridTemplate(new List<Cell>() { combo, new TextBoxCell() });

  10.             // 处理CellPainting事件。
  11.             gcMultiRow.CellPainting += new EventHandler<CellPaintingEventArgs>(gcMultiRow_CellPainting);
  12.         }

  13.         void gcMultiRow_CellPainting(object sender, CellPaintingEventArgs e)
  14.         {
  15.             if (e.CellName == "Combo1" &amp;&amp; e.FormattedValue != null)
  16.             {
  17.                 Color oldForeColor = e.CellStyle.ForeColor;

  18.                 // 通过设置ForeColor为Transparent来隐藏默认的字符串。
  19.                 e.CellStyle.ForeColor = Color.Transparent;
  20.                 e.CellStyle.SelectionForeColor = Color.Transparent;
  21.                 e.Paint(e.ClipBounds);

  22.                 // 根据Cell的值计算需要显示的值
  23.                 string displayStr = null;
  24.                 if (e.FormattedValue.Equals("101 北京 通州"))
  25.                 {
  26.                     displayStr = "101";
  27.                 }
  28.                 else if (e.FormattedValue.Equals("102 天津 河西"))
  29.                 {
  30.                     displayStr = "102";
  31.                 }
  32.                 else if (e.FormattedValue.Equals("103 上海 浦东"))
  33.                 {
  34.                     displayStr = "103";
  35.                 }

  36.                 // 使用DrawText方法自己画短字符串。
  37.                 TextRenderer.DrawText(e.Graphics,
  38.                     displayStr,
  39.                     e.CellStyle.Font,
  40.                     e.CellBounds,
  41.                     oldForeColor,
  42.                     TextFormatFlags.PreserveGraphicsTranslateTransform |
  43.                     TextFormatFlags.PreserveGraphicsClipping |
  44.                     TextFormatFlags.VerticalCenter);

  45.                 e.Handled = true;
  46.             }
  47.         }
复制代码
回复 使用道具 举报
robert
金牌服务用户   /  发表于:2011-7-2 15:31:00
板凳
以下是VB代码

  1.         Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  2.         ' 给MultiRow指定带有Combo的模板。
  3.         Dim combo As New ComboBoxCell()
  4.         combo.Items.Add(&quot;101 北京 通州&quot;)
  5.         combo.Items.Add(&quot;102 天津 河西&quot;)
  6.         combo.Items.Add(&quot;103 上海 浦东&quot;)
  7.         combo.Name = &quot;Combo1&quot;
  8.         Me.gcMultiRow.Template = Template.CreateGridTemplate(New List(Of Cell)() From { _
  9.          combo, _
  10.          New TextBoxCell() _
  11.         })

  12.         ' 处理CellPainting事件。
  13.         AddHandler gcMultiRow.CellPainting, AddressOf gcMultiRow_CellPainting
  14.     End Sub
  15.     Private Sub gcMultiRow_CellPainting(ByVal sender As Object, ByVal e As CellPaintingEventArgs)
  16.         If e.CellName = &quot;Combo1&quot; AndAlso e.FormattedValue IsNot Nothing Then
  17.             Dim oldForeColor As Color = e.CellStyle.ForeColor

  18.             ' 通过设置ForeColor为Transparent来隐藏默认的字符串。
  19.             e.CellStyle.ForeColor = Color.Transparent
  20.             e.CellStyle.SelectionForeColor = Color.Transparent
  21.             e.Paint(e.ClipBounds)

  22.             ' 根据Cell的值计算需要显示的值
  23.             Dim displayStr As String = Nothing
  24.             If e.FormattedValue.Equals(&quot;101 北京 通州&quot;) Then
  25.                 displayStr = &quot;101&quot;
  26.             ElseIf e.FormattedValue.Equals(&quot;102 天津 河西&quot;) Then
  27.                 displayStr = &quot;102&quot;
  28.             ElseIf e.FormattedValue.Equals(&quot;103 上海 浦东&quot;) Then
  29.                 displayStr = &quot;103&quot;
  30.             End If

  31.             ' 使用DrawText方法自己画短字符串。
  32.             TextRenderer.DrawText(
  33.                 e.Graphics,
  34.                 displayStr,
  35.                 e.CellStyle.Font,
  36.                 e.CellBounds,
  37.                 oldForeColor,
  38.                 TextFormatFlags.PreserveGraphicsTranslateTransform Or
  39.                 TextFormatFlags.PreserveGraphicsClipping Or
  40.                 TextFormatFlags.VerticalCenter)

  41.             e.Handled = True
  42.         End If
  43.     End Sub
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部