2013-03-31 3 views
3

Я искал трюк, чтобы добавить элемент управления пользователя в ячейку datagridview и нашел код ниже. Я просто скопирую вставку кода, но когда я пытаюсь добавить CustomColumn, я получил ошибку.Добавление контроля пользователя

Таким образом, я пытаюсь добавить столбец CustomColumn в сетку.

private void button1_Click(object sender, EventArgs e) 
{ 
    CustomColumn cc=new CustomColumn(); 
    dataGridView1.Columns.Add(cc); 
    dataGridView1.Rows.Add(""); 
} 

public class CustomColumn : DataGridViewColumn { 
    public CustomColumn() : base(new CustomeCell()) { } 
    public override DataGridViewCell CellTemplate 
    { 
     get 
     { 
      return base.CellTemplate; 
     } 
     set 
     { 
      // Ensure that the cell used for the template is a CalendarCell. 
      if (value != null && 
       !value.GetType().IsAssignableFrom(typeof(CustomeCell))) 
      { 
       throw new InvalidCastException("It should be a custom Cell"); 
      } 
      base.CellTemplate = value; 
     } 
    }   
} 
public class CustomeCell : DataGridViewCell 
{ 
    public CustomeCell() : base() { } 
    public override Type ValueType 
    { 
     get 
     { 
      return typeof(CustomUserControl); 
     } 
    } 
    protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) 
    { 
     CustomUserControl ctrl = (CustomUserControl)value; 
     Bitmap img = new Bitmap(cellBounds.Width, cellBounds.Height); 
     ctrl.DrawToBitmap(img, new Rectangle(0, 0, ctrl.Width, ctrl.Height)); 
     graphics.DrawImage(img, cellBounds.Location); 
    } 
    protected override void OnClick(DataGridViewCellEventArgs e) 
    { 
     List<InfoObject> objs = this.DataGridView.DataSource as List<InfoObject>; 
     if (objs != null) 
     { 
      if (e.RowIndex >= 0 && e.RowIndex < objs.Count) { 
       CustomUserControl ctrl = objs[e.RowIndex].Ctrl; 
       // Take any action - I will just change the color for now. 
       ctrl.BackColor = Color.Red; 
       ctrl.Refresh(); 
       this.DataGridView.InvalidateCell(e.ColumnIndex, e.RowIndex); 
      }  
     } 
    } 
} 

Пожалуйста, покажите мне, как использовать приведенный выше код для добавления настраиваемого столбца. Я создал пользовательский элемент управления и имя было CustomUserControl, но не повезло. спасибо

+0

У вас возникла ошибка ?? можете ли вы пройти свою ошибку? –

+0

Пожалуйста, ознакомьтесь с этим хорошим примером: http: //social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/thread/ee8eec0b-2b1a-46d2-9d2e-b81828235528/ –

+0

Я просто создаю пользовательский элемент управления и имя было CustomUserControl , пользовательский элемент управления имеет одно текстовое поле и одну кнопку. я просто пытаюсь просто связать эту пользовательскую колонку и получить ошибку. ошибка была связана с литьем. Возможно, я ошибочно использовал код, чтобы добавить пользовательский столбец. если кто-нибудь попробует код, то увидите ошибку. если осмыслить, посоветуйте мне, что делать. спасибо – Thomas

ответ

-1

Выпуск нового плагина для таблиц данных ColVis. ColVis установит кнопку рядом с таблицей, которая при активации отобразит список столбцов в таблице, а конечный пользователь - с возможностью отображения или скрытия столбцов.

Попробуйте datatables.net/release-datatables/extras/ColVis/

Скачать (извлеченные папки в папку "Extras" в распределении DataTables): datatables.net/releases/ColVis-1.0 .1.zip

http://yellowpages.sulekha.com

+0

Я просто не понимаю, что вы пытаетесь сказать. здесь я вставляю свой код и пытаюсь выяснить, что такое ошибка, но здесь вы говорите о другом продукте. – Mou

+0

здесь я говорю о Windows, а не о веб-приложениях. – Mou