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


Автор: Redstuff 15.11.2006, 15:43
Подскажите как вывести n-ое кол-во строк? Если datagrid привязана к dataset.

Автор: Dmitriy_Donetsk 15.11.2006, 17:20
Насколько я понимаю, у тебя в dataset (к примеру) 20 строк, а ты хочешь, 
чтобы у тебя в datagrid отображались первые (к примеру) 10 строк? 
smile 

Автор: Redstuff 15.11.2006, 17:23
Dmitriy_Donetsk, нет у меня в dataset может и не быть строк. Т.е. чисто надо вывести хоть пустые строки
№  |    X    |    Y
--------------------
1    |          |  
2    |          |
3    |          |
....

Автор: Dmitriy_Donetsk 15.11.2006, 17:29
А откуда берется n (количество строк)? Ты сам его задаешь? Или необходимо вывести все строки?

Автор: Redstuff 15.11.2006, 17:31
Dmitriy_Donetsk, сам

Автор: Softaz 15.11.2006, 17:39
Цитата(Redstuff @  15.11.2006,  17:23 Найти цитируемый пост)
может и не быть строк.

Может и не быть или нет?
То есть, могут быть только 7 первых строк, а тебе надо значит еще 3 достроить?
Или ты сразу хочешь 10 новых?

Автор: Dmitriy_Donetsk 15.11.2006, 17:55
Redstuff,

private void Form1_Activated(object sender, System.EventArgs e)
  {
    int n=10;
    sqlDataAdapter1.Fill(dataSet11,0,n,"Orders"); 
  }


В твоем dataSet у тебя будет  n строк. 

Автор: Redstuff 15.11.2006, 18:05
Dmitriy_Donetsk, 

1. у меня даже такого нет
Код

 sqlDataAdapter1

2. имеит ли значение, что данные у меня в xml?


Softaz, столбец № должнен быть обязательно, т.е. в нем значение как раз и нужно. Т.е. задаем его начальное значение и приращиваем на нужное число. А столбцы X и Y, могут быть пустыми

Автор: Softaz 15.11.2006, 19:28
Код

DataRow workRow;
//В dataset.Tables["имя_таблицы_в_датасете"].Rows.Count хранится число строк
//Если их меньше 10, то делаем следующий цикл 10 - dataset.Tables["имя_таблицы_в_датасете"].Rows.Count раз
count = dataset.Tables["имя_таблицы_в_датасете"].Rows.Count + 1;
for (int i = count; i <= 10; i++) 
{
  workRow = dataset.Tables["имя_таблицы_в_датасете"].NewRow();//если она одна, то можно поставить вместо строчки число 0: dataset.Tables[0]
  workRow["№"] = i;
  workRow["X"] = "если надо X";
  workRow["Y"] = "если надо Y";
   dataset.Tables["имя_таблицы_в_датасете"].Rows.Add(workRow);
}

dataGridView1.DataSource = dataset.Tables["имя_таблицы_в_датасете"];


Добавлено @ 19:30 
Естественно, в датасете должна уже быть таблица с полями №, X, Y

Код

DataTable tbl = new DataTale("tbl");
tbl.Columns.Add("№", Type.GetType("System.Int32");
tbl.Columns.Add("X", Type.GetType("System.String");
tbl.Columns.Add("Y", Type.GetType("System.String");
dataset.Tables.Add(tbl);


Писал на память, может где ошибся

Автор: Redstuff 16.11.2006, 00:52
Softaz спасибо!

А как можно поставить ограничение при вводе данных, т.е. чтобы строго было n строк, больше вводить нельзя. (ограничить число строк)

П.С. Где реально можно найти инфу о каждом контроле (на русском желательно), а то у меня много вопросов связанных именно с их использованием.

Автор: Softaz 16.11.2006, 13:33
Цитата(Redstuff @  16.11.2006,  00:52 Найти цитируемый пост)
А как можно поставить ограничение при вводе данных, т.е. чтобы строго было n строк,


Смотря который у тебя механизм ввода.
Если у тебя пользователь вводит даные в грид, то можно в обработчик событиий UserAddedRow, UserDeletedRow
вставить следующее
Код

        private void dataGridView1_UserAddedRow(object sender, DataGridViewRowEventArgs e)
        {
            if (dataGridView1.Rows.Count > 9)
            {
                dataGridView1.AllowUserToAddRows = false;
            }
        }

        private void dataGridView1_UserDeletedRow(object sender, DataGridViewRowEventArgs e)
        {
            if (dataGridView1.Rows.Count < 10)
            {
                dataGridView1.AllowUserToAddRows = true;
            }
        }


Если добавляются строки при кликаньи по кнопке (AddRow() в BindingSource), то же самое, только обработчики событий от BindingSource - названия похожи - посмотришь - догадаешься, делай кнопку неактивной/активной,
и т.д. и т.п. - все зависит от бизнес-правил.

Автор: Redstuff 16.11.2006, 23:39
Softaz, в DataGrid такого я не нашел  smile 
а DataGridView меня не устраивает...
Есть ли AllowUserToAddRows в DataGrid , или же там другой метод?

Автор: Softaz 17.11.2006, 22:28
Цитата(Redstuff @  16.11.2006,  23:39 Найти цитируемый пост)
Softaz, в DataGrid такого я не нашел


Вообще лучше не привязываться к DataGirid, но в учебных целях - сойдет.
Можно так (если у тебя VS2005)
Между dataset и DataGrid вклинь BindingSource.
В обработчик события ListChanged впиши switch-блок, VS должен тебе сам перечислить типа
Код

switch(e.ListChangedType)
...
...
case ListChangedType.ItemDeleted:
{
//Узнаем, что удалили
}
break;
...

Что дальше делать, ты уже знаешь.

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