datagirdview中Combox如何获得选取值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了datagirdview中Combox如何获得选取值?相关的知识,希望对你有一定的参考价值。
如图,是winform中datagirdview中一个列是Combox类型,是DataGridViewComboBoxCell。
假设DataGridViewComboBoxCell这个控件的名称是dgvCombox;
值:dgvCombox.ValueMember="ItemID";(ID:1,2,3)
显示名称:dgvCombox.DisplayMember="ItemName";(名称:名称1,名称2,名称3)
但是这个控件没有像Combox一样的selectedvalue属性。如果我想直接获得dgvCombox的选择的ItemID应该怎么做?
我用dataGridView1.Rows[0].Cells[0].EditedFormattedValue.ToString();这种方式显示的仍然是ItemName。哪位大神能解答一下?
this.Column1.ValueMember = "IDCol";//注意这个列名
this.Column1.DisplayMember = "NameCol";//及这个列名应该是this.Column1.DataSource所绑定的DataTable中的列名
且
this.Column1.DataSource= 语句返回的数据表("Select ItemID as IDCol,ItemName as NameCol From xxTable");//注意列名与ValueMember及DisplayMember的对应关系;
this.Column1.DataPropertyName = "ItemID";//这个列名是this.Column1.DataGridView.DataSource数据源中的列名!注意,这是想说明与上面的ValueMember、DisplayMember是相互独立的,但this.Column1.DataPropertyName列的值必须在this.Column1.DataSource的ValueMember列中存在,否则会报错;
这时,ItemID这样取:
this.dataGridView1.Rows[0].DataBoundItem as DataRowView)[this.Column1.DataPropertyName].ToString()
ItemName可以这样取:
this.dataGridView1.Rows[0].Cells[0].FormattedValue.ToString()
在Winfrom 中,如何实现combox 的列表自动显示ToolTip提示 ?
1 //带ToolTip的combox类文件 2 public class ComboBoxWithTooltip : ComboBox 3 { 4 //tipProperty为显示ToolTip文本的数据源的属性 5 private string tipProperty; 6 public string TipProperty 7 { 8 get { return tipProperty; } 9 set 10 { 11 if (tipProperty!=value) 12 { 13 tipProperty = value; 14 } 15 } 16 } 17 18 private ToolTip toolTipX = new ToolTip(); 19 20 /// <summary> 21 /// Initializes a new instance of the <see cref="ComboBoxWithTooltip"/> class. 22 /// </summary> 23 public ComboBoxWithTooltip() 24 { 25 DrawMode = DrawMode.OwnerDrawFixed; 26 } 27 28 /// <summary> 29 /// Raises the <see cref="E:System.Windows.Forms.ComboBox.DrawItem"/> event. 30 /// </summary> 31 /// <param name="e">A <see cref="T:System.Windows.Forms.DrawItemEventArgs"/> that contains the event data.</param> 32 protected override void OnDrawItem(DrawItemEventArgs e) 33 { 34 ; 35 36 // Needed gate when DropDownStyle set to DropDownList (thanks to "Andrew" remarking on my 37 // StackOverflow post (stackoverflow.com/questions/680373/tooltip-for-each-items-in-a-combo-box/). 38 if (e.Index < 0) { return; } 39 string tiptext = FilterItemOnProperty(Items[e.Index], TipProperty) as string;//从数据源Items[e.Index]的 TipProperty属性获取ToolTip文本 40 string Itemtext = GetItemText(Items[e.Index]); 41 e.DrawBackground(); 42 using (SolidBrush br = new SolidBrush(e.ForeColor)) 43 { e.Graphics.DrawString(Itemtext, e.Font, br, e.Bounds); } 44 if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) 45 { 46 toolTipX.Show(tiptext, this, e.Bounds.Right, e.Bounds.Bottom); 47 //toolTip1.AutoPopDelay = 25000; 48 //toolTip1.InitialDelay = 1000; 49 //toolTip1.ReshowDelay = 0; 50 } 51 e.DrawFocusRectangle(); 52 } 53 54 /// <summary> 55 /// Raises the <see cref="E:System.Windows.Forms.ComboBox.DropDownClosed"/> event. 56 /// </summary> 57 /// <param name="e">An <see cref="T:System.EventArgs"/> that contains the event data.</param> 58 protected override void OnDropDownClosed(EventArgs e) 59 { 60 toolTipX.Hide(this); 61 base.OnDropDownClosed(e); 62 } 63 }
===================================================
上边是实现后的结果,找了好长时间,才找到,做个记录。
实现代码如下:
ToolTip tt = null ; ComboBox cb = null ; private void Form1_Load( object sender, EventArgs e) { cb = new ComboBox(); cb.Items.Insert(0, "第一" ); cb.Items.Insert(1, "第二" ); cb.Items.Insert(2, "第三" ); cb.Items.Insert(3, "第四" ); cb.DrawMode = DrawMode.OwnerDrawFixed; cb.DrawItem+= new DrawItemEventHandler(cb_DrawItem); cb.DropDownClosed+= new EventHandler(cb_DropDownClosed); this .Controls.Add(cb); cb.SelectedIndex = 1; tt = new ToolTip(); tt.SetToolTip(cb, "zj" ); } void cb_DrawItem( object sender, System.Windows.Forms.DrawItemEventArgs e) { // 绘制背景 e.DrawBackground(); //绘制列表项目 e.Graphics.DrawString(cb.Items[e.Index].ToString(), e.Font, System.Drawing.Brushes.Black, e.Bounds); //将高亮的列表项目的文字传递到toolTip1(之前建立ToolTip的一个实例) if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) tt.Show(cb.Items[e.Index].ToString(), cb, e.Bounds.X + e.Bounds.Width, e.Bounds.Y + e.Bounds.Height); e.DrawFocusRectangle(); } void cb_DropDownClosed( object sender, EventArgs e) { tt.Hide(cb); } |
以上是关于datagirdview中Combox如何获得选取值?的主要内容,如果未能解决你的问题,请参考以下文章
C# Winform 如何居中DataGirdView中的文本?
C#如何将DataGirdView1中勾选中checkbox多行 添加到另一个DatagridView2中急用要用代码。