Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ComboBox в DataGrid (WinForms)
|
|||
|---|---|---|---|
|
#18+
вот класс: using System; using System.Windows.Forms; using System.Drawing; namespace testGrid { public class clmnComboBox: DataGridColumnStyle { private ComboBox MyCombo=new ComboBox(); private bool isEditing; public clmnComboBox(System.Data.DataTable ComboDataSource, string ComboDisplayMember,string ComboValueMember):base() { MyCombo.DataSource=ComboDataSource; MyCombo.DisplayMember=ComboDisplayMember; MyCombo.ValueMember=ComboValueMember; MyCombo.Visible=true; MyCombo.Invalidate(); MyCombo.DropDownStyle=ComboBoxStyle.DropDownList; } protected override void Abort(int rowNum) { //MessageBox.Show("1"); isEditing = false; MyCombo.SelectedValueChanged-=new EventHandler(MyCombo_SelectedIndexChanged); Invalidate(); } protected override bool Commit(CurrencyManager dataSource, int rowNum) { //MessageBox.Show("2"); MyCombo.Bounds=System.Drawing.Rectangle.Empty; MyCombo.SelectedValueChanged-=new EventHandler(MyCombo_SelectedIndexChanged); if (!isEditing) return true; isEditing = false; try { int value=(int)MyCombo.SelectedValue; SetColumnValueAtRow(dataSource, rowNum, value); } catch(Exception) { Abort(rowNum); return false; } Invalidate(); return true; } protected override void Edit(CurrencyManager source,int rowNum,Rectangle bounds,bool readOnly,string instantText,bool cellIsVisible) { //MessageBox.Show(rowNum.ToString()); int value =(int)GetColumnValueAtRow(source, rowNum); if (cellIsVisible) { MyCombo.Bounds = new Rectangle (bounds.X , bounds.Y , bounds.Width, bounds.Height ); MyCombo.SelectedValue = value; MyCombo.SelectedValueChanged += new EventHandler(MyCombo_SelectedIndexChanged); MyCombo.Visible = true; } else { MyCombo.SelectedValue = value; MyCombo.Visible = false; } if (MyCombo.Visible) DataGridTableStyle.DataGrid.Invalidate(bounds); } protected override Size GetPreferredSize(Graphics g,object value) { return new Size(100, MyCombo.PreferredHeight ); } protected override int GetMinimumHeight() { return MyCombo.PreferredHeight; } protected override int GetPreferredHeight(Graphics g,object value) { return MyCombo.PreferredHeight; } protected override void Paint(Graphics g,Rectangle bounds,CurrencyManager source,int rowNum) { //MessageBox.Show("P1"); Paint(g, bounds, source, rowNum, false); } protected override void Paint(Graphics g,Rectangle bounds,CurrencyManager source,int rowNum,bool alignToRight) { //MessageBox.Show("P2"); Paint( g,bounds, source, rowNum, Brushes.Red, Brushes.Blue, alignToRight); } protected override void Paint(Graphics g,Rectangle bounds,CurrencyManager source,int rowNum,Brush backBrush, Brush foreBrush,bool alignToRight) { int t=(int)MyCombo.SelectedValue; string MyString; MyCombo.SelectedValue=(int)GetColumnValueAtRow(source, rowNum); MyString=MyCombo.Text; Rectangle rect = bounds; g.FillRectangle(backBrush,rect); rect.Offset(0, 0); rect.Height -= 0; g.DrawString(MyString, this.DataGridTableStyle.DataGrid.Font, foreBrush, rect); MyCombo.SelectedValue=t; } protected override void SetDataGridInColumn(DataGrid value) { base.SetDataGridInColumn(value); if (MyCombo.Parent != null) { MyCombo.Parent.Controls.Remove (MyCombo); } if (value != null) { value.Controls.Add(MyCombo); } MyCombo.Visible=false; } private void MyCombo_SelectedIndexChanged(object sender,System.EventArgs e) { this.isEditing=true; base.ColumnStartedEditing(MyCombo); } } } при редактировании существующих записей - все ОК, при добавлении новой - происходит исключение что делаю не так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 11:18 |
|
||
|
ComboBox в DataGrid (WinForms)
|
|||
|---|---|---|---|
|
#18+
какое исклюение (текст) и где происходит ??? ---- PS: "Specified cast is not valid." в строке: int value =(int)GetColumnValueAtRow(source, rowNum); ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 11:41 |
|
||
|
ComboBox в DataGrid (WinForms)
|
|||
|---|---|---|---|
|
#18+
да, именно Specified cast is not valid." в строке: int value =(int)GetColumnValueAtRow(source, rowNum); извините, что сразу не сказал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 11:44 |
|
||
|
ComboBox в DataGrid (WinForms)
|
|||
|---|---|---|---|
|
#18+
2 варианта решения: сделай default value у этого поля, например, равным 0 (чтобы был integer) иначе DBNull -> int - это и есть ошибка при приведении типов или замени int value =(int)GetColumnValueAtRow(source, rowNum); на object value =GetColumnValueAtRow(source, rowNum); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 11:49 |
|
||
|
ComboBox в DataGrid (WinForms)
|
|||
|---|---|---|---|
|
#18+
поменял int value =(int)GetColumnValueAtRow(source, rowNum); на object value =GetColumnValueAtRow(source, rowNum); та же фигня: An unhandled exception of type 'System.InvalidCastException' occurred in testGrid.exe Additional information: Specified cast is not valid. больше скажу, если я оставляю метод Edit пустым, исключение всеравно происходит( 'System.InvalidCastException' )тольок уже здесь static void Main() { Application.Run(new Form1()); } (это в классе формы, где объявляется clmnComboBox ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 11:57 |
|
||
|
ComboBox в DataGrid (WinForms)
|
|||
|---|---|---|---|
|
#18+
в ComboBox есть элемент типа: для ValueMember - DBNull.Value; и DisplayMember - "(не определено)"; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 12:03 |
|
||
|
ComboBox в DataGrid (WinForms)
|
|||
|---|---|---|---|
|
#18+
вы наверное не поняли... если в методе Edit с ComboBox ВОБЩЕ ничего не делать, и вообще ничего не делать, всеравно происходит исключение... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 12:07 |
|
||
|
ComboBox в DataGrid (WinForms)
|
|||
|---|---|---|---|
|
#18+
обрати теперь внимание на строку: Код: plaintext это таже самая история для DBNull ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 12:17 |
|
||
|
ComboBox в DataGrid (WinForms)
|
|||
|---|---|---|---|
|
#18+
ага... туплю, наверное, сейсас попробую, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 12:33 |
|
||
|
ComboBox в DataGrid (WinForms)
|
|||
|---|---|---|---|
|
#18+
все получилось! если интересно то вот, переделал методы Edit и Paint: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 13:06 |
|
||
|
ComboBox в DataGrid (WinForms)
|
|||
|---|---|---|---|
|
#18+
а как тебе удалось отредактировать своё последнее сообщение ??? только что было без форматирования (как и первый пост) - и вдруг ... мистика, блин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 13:28 |
|
||
|
ComboBox в DataGrid (WinForms)
|
|||
|---|---|---|---|
|
#18+
не форматировал.... сам удивляюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 13:46 |
|
||
|
ComboBox в DataGrid (WinForms)
|
|||
|---|---|---|---|
|
#18+
это всё твой ник виноват - прям по мозгам WHISKY ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2004, 13:59 |
|
||
|
|

start [/forum/topic.php?fid=20&msg=32838742&tid=1437597]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 224ms |
| total: | 397ms |

| 0 / 0 |
