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


Автор: atas 23.5.2008, 20:11
Всем привет!

 Подскажите пожалуйста, у меня проблема с dataGridView неотображаются скрулы. на форме dataGridView не помешен ни в какой контейнер (panel и т.п.). 


события на загрузку формы (Была попитка активироват скрул в ручную и через свойства):


Код


private void clients_Load(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;

          
            foreach (DataGridViewColumn column in dataGridView1.Columns)
            {
                column.Frozen = false;
            }
          
           this.dataGridView1.ScrollBars = ScrollBars.Both;

        
           dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.Rows[dataGridView1.RowCount - 1].Index;

           this.dataGridView1.Controls[0].Enabled = true;
           this.dataGridView1.Controls[1].Enabled = true;
           this.dataGridView1.Refresh();
         
        }





Свойства dataGridView  установлены в:

AutoSizeColumnsMode = ColumnHeader
AllowUserToAddRows = false
ColumnHeadersHeightSizeMode = AutoSize
Dock = Fill
MaltySelect = false
ReadOnly = True
SelectionMode = FullRowSelect

осталные свойства по умолчанию

Добавление новых рядов программно.

Спасибо

Автор: Linus 24.5.2008, 22:55
При тех установках, что Вы привели, всё должно работать. Возможно Вы в дизайнере выставили ещё какие-то свойства? Может AutoSizeColumnMode там в Fill, или ещё что-то?

Автор: atas 25.5.2008, 02:05
Linus спасибо что Вы ответили, но у меня AutoSizeColumnsMode = ColumnHeader как я и писал выше, я попробывал разные варианты с этим свойством, скрул не появлялся.

 Будут другие идеи?  Спасибо.

Автор: Linus 25.5.2008, 14:19
Попробуйте выкинуть грид из формы и кинуть его опять из ToolBox, проделать те же операции, что Вы писали в 1-м посте. По крайней мере у меня отлично заработало. Либо, если не сложно, скиньте проект с этой формой сюда, чтоб можно было поглядеть smile

Автор: atas 25.5.2008, 19:50
Linus спасибо Вам за участие.
  Грид выкидивал из формы, а новый с тулбара вставлял, и настраивал все выше перечисленные свойства, но скрул НЕ появился.

Прикрепляю проект с формой(Clients) где не работает скрул у грида. Скрул правда у меня нигде не работает, но для этой формы это особенно критично.

Database - MS SQL Express

Смотреть форму с гридом через меню:
M.A.J. Maitres -> Mises a joure -> Clients

Архив разбил на три части так как Максимальный размер прикрепляемого файла 1мб

Спасибо

Автор: atas 25.5.2008, 19:52
Архив часть вторая:

Автор: atas 25.5.2008, 19:53
Архив част третья


Автор: Linus 26.5.2008, 09:14
atas, всё у Вас работает, просто у грида Вы выставили Dock = Fill, после чего у panel2 выставили Dock = Bottom. Таким образом, у Вас panel2 перекрывает нижнюю часть грида, и Вы не видите нижний скроллбар. Проблему можно решить, к примеру, якорями или сплиттером.

P.S. Извините, может не туда  лезу, но, возможно, Вам стоит поглядеть на ORM (например, NHibernate), чтобы облегчить разработку DataLayer. 

P.P.S. Если уж совсем не хотите использовать ORM, то к хранимкам проще обращаться так:

Код

SqlCommand sqlCommand = new SqlCommand("StoredProcName", connection);
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add("SomeID", SqlDbType.Int).Value = 5;
sqlCommand.Parameters.Add("SomeValue", SqlDbType.Int).Value = 10;

//Если ХП вернёт значение (например, при вставке, SELECT @SomeID = @@IDENTITY)
sqlCommand.Parameters.Add("SomeDBColumn", SqlDbType.Int);
sqlCommand.Parameters["SomeDBColumnid"].Direction = ParameterDirection.Output;

sqlCommand.Parameters.Add("session", SqlDbType.NVarChar, 17).Value = "SomeString";
...
connection.Open();

int result = sqlCommand.ExecuteNonQuery();

Автор: atas 26.5.2008, 14:24
Linus спасибо, все заработало.

 это мой первый проект на WinForms, поэтому попадаются вот такие ошибки. И архитектуру надо дорабатывать (исползовать тот же ORM). Сейчас стою перед выбором НХибернат или LINQ.

Автор: Linus 26.5.2008, 16:22
Ну LINQ - это не ORM. Тем более NHibernate можно использовать вместе с LINQ. Можно один раз написать хороший слой доступа к данным и забыть о том, что такое многосчисленные хранимые процедуры с дублирующимся кодом для каждой операции вставки/обновления/выборки на сервере. Хотя и некоторые минусы в этом подходе есть.

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