Страница: 1 |
|
Вопрос: Изменение ширины DGV
|
Добавлено: 16.03.09 13:54
|
|
Автор вопроса: aleha
|
У меня в DGV падают разные по ширине строковые данные, а полоса прокрутки периодически мешает, когда надо просмотреть всю строку целиком. Делать DGV изначально большим по ширине не очень хочется, пустые области мозолят глаз.
Решил циклом пройтись по всем видимым колонкам, посчитать их суммарню ширину и после вывода данных поменять параметр size на новый, но всё равно получается криво, то он чуть больше то он чуть меньше отображенной области, не могу никак поймать эти пиксели, в чём может быть дело? Есть какая-нить возможность сделать ширину DGV такой же как все видимые колонки?
Параметр autosize выдает пустое поле с правого боку, видимо из-за скрытой колонки и это не подходит.
Ответить
|
Номер ответа: 5 Автор ответа:
EROS
   
Вопросов: 58 Ответов: 4255
|
Профиль | | #5
|
Добавлено: 16.03.09 18:01
|
я не настолько крут в программинге, поэтому наследование меня ставит в тупик
да фигня это наследование.. не так страшен черт как его малюют.. вот смотри.
1. Определяем аргументы события и делегата
ScrollBarEventArgs.cs
-
- using System;
- using System.Windows.Forms;
-
- namespace WindowsFormsApplication1
- {
- public delegate void ScrollBarHandler(object sender, ScrollBarEventArgs e);
-
- public class ScrollBarEventArgs : EventArgs
- {
- public ScrollBarEventArgs(ScrollBar scrollBar)
- {
- if (scrollBar == null) throw new ArgumentNullException();
- this.ScrollBar = scrollBar;
- }
-
- private ScrollBar _ScrollBar;
- public ScrollBar ScrollBar
- {
- get { return _ScrollBar; }
- private set
- {
- _ScrollBar = value;
- }
- }
-
- public bool ScrollBarVisible
- {
- get { return this.ScrollBar.Visible; }
- }
- }
- }
2. Создаем наш новый контрол и наследуем его от DataGridView, определяем в нем событие и инициируем его в нужный момент
MyDataGridView.cs
-
- using System;
- using System.Windows.Forms;
-
- namespace WindowsFormsApplication1
- {
- public class MyDataGridView : DataGridView
- {
- public event ScrollBarHandler VScrollBarVisibleChanged;
-
- public MyDataGridView()
- {
- VerticalScrollBar.VisibleChanged += new EventHandler(VerticalScrollBar_VisibleChanged);
- }
-
- private void VerticalScrollBar_VisibleChanged(object sender, EventArgs e)
- {
- OnVScrollBarVisibleChanged(new ScrollBarEventArgs(VerticalScrollBar));
- }
- #region OnVScrollBarVisibleChanged
- /// <summary>
- /// Triggers the VScrollBarVisibleChanged event.
- /// </summary>
- public virtual void OnVScrollBarVisibleChanged(ScrollBarEventArgs e)
- {
- if (VScrollBarVisibleChanged != null)
- VScrollBarVisibleChanged(this, e);
- }
- #endregion
- }
- }
В результате после компиляции у тебя на закладе ToolBox появится новый контрол MyDataGridView (в виде шестеренки) у которого будет свойство VScrollBarVisibleChanged.
3. Ну и осталось испытать наше творение..
Form1.cs
-
- using System;
- using System.Data;
- using System.Windows.Forms;
-
- namespace WindowsFormsApplication1
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- myDataGridView1.VScrollBarVisibleChanged += new ScrollBarHandler(myDataGridView1_VScrollBarVisibleChanged);
- }
-
- private void button1_Click(object sender, EventArgs e)
- {
- DataTable table = new DataTable();
- table.Columns.Add("Id", typeof(int));
- table.Columns.Add("Name", typeof(string));
- for (int i = 0; i < 25; i++)
- table.Rows.Add(new object[] { i, "Name - " + i });
- myDataGridView1.DataSource = table;
- }
-
- void myDataGridView1_VScrollBarVisibleChanged(object sender, ScrollBarEventArgs e)
- {
- string message = "VScrollBar is " + ((e.ScrollBarVisible) ? "visible" : "not visible");
- Console.WriteLine(message);
- }
- }
- }
Если не сможешь перевести на VB.NET пиши.. я думаю с переводом парни с форума помогут.
Ответить
|
Страница: 1 |
Поиск по форуму