Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > "Label" или "TextBox" в DataTable?


Автор: bhaa 10.4.2008, 17:35
Hi, All!

Это работает:
Bitmap bmp = new Bitmap("DEVIL.GIF");
dataTable.Columns.Add("FOO", typeof(Bitmap));
dataTable.Rows[0]["FOO"] = bmp;

Как сделать так, чтобы это работало с typeof(Label) или typeof(TextBox)?

Заранее, tanks,
Alexander.

Автор: vponomarov 10.4.2008, 18:29
bhaa, а какие собственно говоря проблемы? smile 
Код

DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("aa", typeof(Label)));
            dt.Rows.Add(new object[] { new Label()});

другой вопрос, зачем это нужно...

Автор: bhaa 11.4.2008, 13:27
Это не работает:
Label label = new Label();
label.Text = "XYZ";
dataTable.Columns.Add("FOO", typeof(Label));
dataTable.Rows[0]["FOO"] = label;

Автор: Mr_Smith 11.4.2008, 13:40
Сериализуй объект в бинарный поток, который и храни в своей таблице. потом десиреализуй и получи объект назад 

Автор: bhaa 11.4.2008, 13:49
Для определённости.
Мне надо многострочную конструкцию, один к одному, показать в ячейке.
Например, вот такое:
r[0]=Nor oper press: 
r[1]=12_24]{Real(8.2)}
r[2]=12_43]{Char(10)}
должно точно также отобразиться в ячейке DataGridView.
Крайний случай, "прорисовать" группу строк, "превратить" в Bitmap и отобразить.
Как сообщал с Bitmap работает.
Но хочется сделать "нормально", а typeof(Label) или typeof(TextBox) почему-то не отображается.
Просто видна пустая ячейка. Т.е. это:
Label label = new Label();
label.Text = "XYZ";
dataTable.Columns.Add("FOO", typeof(Label));
dataTable.Rows[0]["FOO"] = label;
или это:
TextBox textBox = new TextBox();
textBox.Text = "XYZ";
dataTable.Columns.Add("FOO", typeof(TextBox));
dataTable.Rows[0]["FOO"] = textBox;
НЕ РАБОТАЕТ :-((
Если эту многострочную конструкцию я, просто, помещаю вместе с таблицей в DataGridView, то она, конструкция, отображается одной строкой, т.к. "\n" не воспринимается по существу, а отображается ввиде "неизвестного" символа.

Автор: vponomarov 11.4.2008, 14:34
bhaa, ну так надо было сразу сказать, что тебе нужно smile 

Цитата(bhaa @  11.4.2008,  13:27 Найти цитируемый пост)
Это не работает:
Label label = new Label();
label.Text = "XYZ";
dataTable.Columns.Add("FOO", typeof(Label));
dataTable.Rows[0]["FOO"] = label; 

не правда, все работает. в dataTable добавляются данные, а то что ты их не можешь увидеть в DataGridView это уже другой вопрос.
на сколько я знаю, в DataGridView нет возможности выводить многострочный текст.
вернее такая возможность есть, но он сам решает как разбивать текст на строки smile 
попробуй вместо DataGridView использовать TableLayoutPanel.

Автор: bhaa 11.4.2008, 15:17
Я и сам не пойму почему DataGridView столбец "FOO" показывает пустым.
От  DataGridView мне никуда не деться, ибо это дано "свыше".

Автор: vponomarov 11.4.2008, 16:51
Цитата(bhaa @  11.4.2008,  15:17 Найти цитируемый пост)
Я и сам не пойму почему DataGridView столбец "FOO" показывает пустым.

тут нет ничего удивительного: в DataGridView есть четко заданный набор данных которые он умеет отображать.
как вариант решения твоей проблемы: нужно создать свой класс, производный от DataGridViewColumn (ну или тип того smile ), который умеет отображать форматированный текст.

Автор: bhaa 11.4.2008, 17:07
Идея хороша. Вопрос в том, что, пока, плохо представляю, как это сделать: "который умеет отображать форматированный текст".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)