Hello Bruno,
Please se this sample. It gives you two options, a standard combo column, or the one I prefer is a GridViewMultiColumnCombo.
You can paste this directly into a new project
Designer File
partial
class
Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private
System.ComponentModel.IContainer components;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected
override
void
Dispose(
bool
disposing)
{
if
(disposing && (components !=
null
))
{
components.Dispose();
}
base
.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private
void
InitializeComponent()
{
this
.radGridView1 =
new
Telerik.WinControls.UI.RadGridView();
((System.ComponentModel.ISupportInitialize)(
this
.radGridView1)).BeginInit();
this
.SuspendLayout();
//
// radGridView1
//
this
.radGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
this
.radGridView1.Location =
new
System.Drawing.Point(0, 0);
this
.radGridView1.Name =
"radGridView1"
;
this
.radGridView1.Size =
new
System.Drawing.Size(469, 262);
this
.radGridView1.TabIndex = 0;
this
.radGridView1.Text =
"radGridView1"
;
this
.radGridView1.CellEditorInitialized +=
new
Telerik.WinControls.UI.GridViewCellEventHandler(
this
.radGridView1_CellEditorInitialized);
//
// Form1
//
this
.AutoScaleDimensions =
new
System.Drawing.SizeF(6F, 13F);
this
.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this
.ClientSize =
new
System.Drawing.Size(469, 262);
this
.Controls.Add(
this
.radGridView1);
this
.Name =
"Form1"
;
this
.Text =
"Form1"
;
this
.Load +=
new
System.EventHandler(
this
.Form1_Load);
((System.ComponentModel.ISupportInitialize)(
this
.radGridView1)).EndInit();
this
.ResumeLayout(
false
);
}
#endregion
private
Telerik.WinControls.UI.RadGridView radGridView1;
}
Form1.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Windows.Forms;
using
Telerik.WinControls.UI;
public
partial
class
Form1 : Form
{
private
BindingList<Product> products =
new
BindingList<Product>();
private
BindingList<Vat> vatRates =
new
BindingList<Vat>();
public
Form1()
{
InitializeComponent();
vatRates.Add(
new
Vat(
"Standard"
, 20));
vatRates.Add(
new
Vat(
"Low Rate"
, 12));
vatRates.Add(
new
Vat(
"Zero Rate"
, 0));
products.Add(
new
Product(
"Paracetamol"
, 20));
products.Add(
new
Product(
"Ibuprohen"
, 12));
products.Add(
new
Product(
"Calpol"
, 0));
}
private
void
Form1_Load(
object
sender, EventArgs e)
{
this
.radGridView1.AutoGenerateColumns =
false
;
this
.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
GridViewTextBoxColumn nameColumn =
new
GridViewTextBoxColumn();
nameColumn.HeaderText =
"Name"
;
nameColumn.Name =
"Name"
;
nameColumn.FieldName =
"Name"
;
GridViewComboBoxColumn rateColumn =
new
GridViewComboBoxColumn();
rateColumn.HeaderText =
"Vat Rate"
;
rateColumn.FieldName =
"VatRate"
;
rateColumn.DataSource = vatRates;
rateColumn.DisplayMember =
"VatRate"
;
rateColumn.ValueMember =
"VatRate"
;
// or use a MultiComboColumn
GridViewMultiComboBoxColumn rateColumnCombo =
new
GridViewMultiComboBoxColumn();
rateColumnCombo.HeaderText =
"Vat Rate"
;
rateColumnCombo.FieldName =
"VatRate"
;
rateColumnCombo.DataSource = vatRates;
rateColumnCombo.DisplayMember =
"VatRate"
;
rateColumnCombo.ValueMember =
"VatRate"
;
this
.radGridView1.Columns.Add(nameColumn);
this
.radGridView1.Columns.Add(rateColumn);
this
.radGridView1.Columns.Add(rateColumnCombo);
this
.radGridView1.DataSource = products;
}
private
void
radGridView1_CellEditorInitialized(
object
sender, GridViewCellEventArgs e)
{
if
(e.ActiveEditor
is
RadMultiColumnComboBoxElement)
{
RadMultiColumnComboBoxElement editor = (RadMultiColumnComboBoxElement)e.ActiveEditor;
editor.EditorControl.BestFitColumns();
}
}
}
public
class
Product
{
public
Product(
string
name,
decimal
vatRate)
{
this
.Name = name;
this
.VatRate = vatRate;
}
public
string
Name
{
get
;
set
; }
public
decimal
VatRate
{
get
;
set
; }
}
public
class
Vat
{
public
Vat(
string
name,
decimal
vatRate)
{
this
.Name = name;
this
.VatRate = vatRate;
}
public
string
Name
{
get
;
set
; }
public
decimal
VatRate
{
get
;
set
; }
}
Hope that helps
Richard