Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / DataGrid + WPF / 25 сообщений из 43, страница 1 из 2
19.11.2009, 22:53
    #36321033
DATAGRID_WPF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
Помнится в WinForms у DataGridView был виртуальный режим отображения данных http://msdn.microsoft.com/ru-ru/library/ms171622.aspx. Есть ли что-то подобное у DataGrid в WPF? Если нет, то каким же образом, например, обрабатывать крупные объёмы данных?
PS Про то, что грузить на клиента большое кол-во записей нет смысла, знаю!
...
Рейтинг: 0 / 0
20.11.2009, 09:46
    #36321507
eJack
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
DATAGRID_WPF,

ListView.View = GridView

и еще есть DataGrid в wpftoolkit
http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29117
...
Рейтинг: 0 / 0
20.11.2009, 10:16
    #36321581
koJIo6ok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
eJack,
объясникте плз что такое wpftoolkit? вы пишите что там есть DataGrid - те можно скачать поставить и будет в приложении WPF датагрид аналог datagridview c winforms?
...
Рейтинг: 0 / 0
20.11.2009, 15:40
    #36322642
toolkit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
koJIo6ok,

Вам тоже злой админ отключил гугл?

http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29117
...
Рейтинг: 0 / 0
20.11.2009, 16:01
    #36322733
koJIo6ok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
я сам админ
помогите разобраться с ним плз, на winforms у меня было
Код: 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.
//plan
With Me.DataSet1.Tables.Add("plan")
.Columns.Add("id_plg", GetType(Integer))
.Columns.Add("id_org_ob", GetType(Integer)).Unique = True
.Columns.Add("План на год, руб.", GetType(Decimal)).DefaultValue = 0
.Columns.Add("Оборудование в том числе, руб.", GetType(Decimal)).DefaultValue = 0
.PrimaryKey = New DataColumn() {.Columns.Item(0)}
.Columns.Item(0).AutoIncrement = True
.Columns.Item(0).AutoIncrementSeed = -1
.Columns.Item(0).AutoIncrementStep = -1
.Columns.Item(2).AllowDBNull = False
.Columns.Item(3).AllowDBNull = False
End With
Dim tableMap As DataTableMapping
tableMap = Me.SqlDataAdapter1.TableMappings.Add("Table1", "sp")
tableMap = Me.SqlDataAdapter1.TableMappings.Add("Table", "plan")
Dim columnMaps = New DataColumnMapping() _
{New DataColumnMapping("id_plg", "id_plg"), _
New DataColumnMapping("id_org_ob", "id_org_ob"), _
New DataColumnMapping("plan_o", "План на год, руб."), _
New DataColumnMapping("obor_o", "Оборудование в том числе, руб.")}
tableMap.ColumnMappings.AddRange(columnMaps)
//sp_fil
With Me.DataSet1.Tables.Add("sp")
.Columns.Add("id_na_ob", GetType(Integer))
.Columns.Add("nazv", GetType(String))
End With
//подст столбец
Dim col As New DataGridViewComboBoxColumn
col.Name = "podst_nazv"
col.HeaderText = "Название организации"
col.DataPropertyName = "id_org_ob"
col.DataSource = Me.DataSet1.Tables(1)
col.DisplayMember = "nazv"
col.ValueMember = "id_na_ob"
col.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
col.MaxDropDownItems = 6
Me.DataGridView1.Columns.Add(col)
//select command plan
cn.Open()
Me.SqlDataAdapter1.Fill(Me.DataSet1)
cn.Close()
                
Me.BindingSource1.DataSource = Me.DataSet1.Tables(0)
Me.DataGridView1.Columns.Item(0).Visible = False
здесь же никак не могу пристроить комбобокс колумн
Код: 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.
void myDgColumnAdd()
{
   DataTemplate dt;
   Binding bind;
   string _strFormat = "{0:N1}";
   //0
   dt = new DataTemplate(typeof(string));
   FrameworkElementFactory factoryTXT = new FrameworkElementFactory(typeof(TextBlock));
   bind = new Binding("[0]") { Mode = BindingMode.TwoWay };
   factoryTXT.SetBinding(TextBlock.TextProperty, bind); 
   dt.VisualTree = factoryTXT;
   DataGridTemplateColumn txtCol = new DataGridTemplateColumn { Header = "id_plg", CellTemplate = dt };
   myDg.Columns.Add(txtCol);
   // 1
   dt = new DataTemplate(typeof(string));
   factoryTXT = new FrameworkElementFactory(typeof(TextBlock));
   bind = new Binding("[1]") { Mode = BindingMode.TwoWay };
   factoryTXT.SetBinding(TextBlock.TextProperty, bind); 
   dt.VisualTree = factoryTXT;
   txtCol = new DataGridTemplateColumn { Header = "id_org_ob", CellTemplate = dt };                     
   myDg.Columns.Add(txtCol);
   // 2
   dt = new DataTemplate(typeof(string));
   factoryTXT = new FrameworkElementFactory(typeof(TextBox));
   factoryTXT.SetValue(TextBox.TextAlignmentProperty, TextAlignment.Right);            
   bind = new Binding("[2]")
      {
         Converter = new myConverter(),
         ConverterParameter = _strFormat,
         Mode = BindingMode.TwoWay
      };
   factoryTXT.SetBinding(TextBox.TextProperty, bind);  
   dt.VisualTree = factoryTXT;
   txtCol = new DataGridTemplateColumn { Header = "План на год, руб.", CellTemplate = dt };                     
   myDg.Columns.Add(txtCol);
   // 3
   dt = new DataTemplate(typeof(string));
   factoryTXT = new FrameworkElementFactory(typeof(TextBox));
   factoryTXT.SetValue(TextBox.TextAlignmentProperty, TextAlignment.Right);            
   bind = new Binding("[3]")
      {
      Converter = new myConverter(),
      ConverterParameter = _strFormat,
      Mode = BindingMode.TwoWay
      };
   factoryTXT.SetBinding(TextBox.TextProperty, bind);
   dt.VisualTree = factoryTXT;
   txtCol = new DataGridTemplateColumn { Header = "Оборудование в том числе, руб.", CellTemplate = dt };                      
   myDg.Columns.Add(txtCol);
   // комбобокс, что знал то и написал - в итоге канешн не рабоает :)))
   DataGridComboBoxColumn cbCol = new DataGridComboBoxColumn();            
   cbCol.Header = "Название организации";
   cbCol.ItemsSource = ds.Tables[1].Rows;
   cbCol.SelectedValuePath = "id";
   cbCol.DisplayMemberPath = "name";
   cbCol.SelectedItemBinding = new Binding("id");
   cbCol.TextBinding = new Binding("[1]");            
   myDg.Columns.Add(cbCol);
   }
...
Рейтинг: 0 / 0
20.11.2009, 17:10
    #36323027
koJIo6ok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
никто его не использовал что-ли?
...
Рейтинг: 0 / 0
20.11.2009, 19:25
    #36323291
koJIo6ok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
получается задать столбец с комбобоксом - но он не привязан к данным строки
и получается задать столбез связанный с данными строки но без комбобокса
чего не хватает?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
dt = new DataTemplate();
factoryTXT = new FrameworkElementFactory(typeof(ComboBox));
factoryTXT.SetValue(ComboBox.ItemsSourceProperty, ds.Tables[1].Rows);
factoryTXT.SetValue(ComboBox.SelectedValuePathProperty, "[0]");
factoryTXT.SetValue(ComboBox.DisplayMemberPathProperty, "[1]");                        
dt.VisualTree = factoryTXT;
txtCol = new DataGridTemplateColumn { Header = "Название организации", CellTemplate = dt };            
myDg.Columns.Add(txtCol);
// комбобокс
DataGridComboBoxColumn cbCol = new DataGridComboBoxColumn { Header = "Название организации" };
cbCol.ItemsSource = ds.Tables[1].Rows;
cbCol.SelectedValuePath = "[0]";
cbCol.DisplayMemberPath = "[1]";
bind = new Binding("[1]")
   {                
      Mode = BindingMode.TwoWay
    };
cbCol.SelectedValueBinding = bind;                
myDg.Columns.Add(cbCol);
...
Рейтинг: 0 / 0
20.11.2009, 20:59
    #36323401
koJIo6ok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
ну чего я такой темный
...
Рейтинг: 0 / 0
20.11.2009, 20:59
    #36323402
koJIo6ok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
все же так просто
...
Рейтинг: 0 / 0
21.11.2009, 11:27
    #36323682
eJack
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
koJIo6ok,

Учите xaml там с помощью шаблона все делается в три минуты и пять строчек кода :)
...
Рейтинг: 0 / 0
21.11.2009, 11:35
    #36323686
eJack
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
Код: plaintext
1.
2.
3.
4.
5.
<my:DataGrid Name="dataGrid1">
            <my:DataGrid.Columns>
                <my:DataGridTextColumn Header="ИД"/>
                <my:DataGridComboBoxColumn Header="Название организации" />
            </my:DataGrid.Columns>
        </my:DataGrid>
...
Рейтинг: 0 / 0
21.11.2009, 23:48
    #36324138
koJIo6ok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
eJack,
там нечего учить, все просто но меня он бодрит
...
Рейтинг: 0 / 0
23.11.2009, 08:20
    #36325044
eJack
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
koJIo6okeJack,
там нечего учить, все просто но меня он бодрит

Это так в начале - потом вообще от него не отторвешь - у меня одно время было я вообще хотел как можно больше написать на xaml. Потом прошло :)

Но он реально помогает в "написании" гуя - все просто и кратко и главное понятно. Посмотрите на свой код в шарпе - это ужас его сопровождать бррр....

Хотя если пишите для себя - то можно всё !
...
Рейтинг: 0 / 0
23.11.2009, 09:20
    #36325086
koJIo6ok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
eJack,
что бы писать на xaml надо создавать окно? опять получится мульён форм отличающихся иногда минимально
...
Рейтинг: 0 / 0
23.11.2009, 12:52
    #36325600
koJIo6ok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
кто-нибудь связывал DataGrid и DataTable в BindingMode.TwoWay ?
...
Рейтинг: 0 / 0
23.11.2009, 16:35
    #36326395
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
koJIo6okeJack,
что бы писать на xaml надо создавать окно? опять получится мульён форм отличающихся иногда минимально
нужно разносить отображение и работу с данными по разным сущностям, форма не должна знать про данные, она просто показывает. Всю работу по выборке данных и помещения их на форму, должен делать другой класс/классы, его и наследуй и изменяй как хочешь под задачу.
Например форма "справочник", это одни класс-окно с гридом, меню, кнопками ..., есть базовый класс управления формой справочника, в нем базовые вещи, виртуальные методы сохранения размеров окна и колонок в гриде, скрытия/отображения/добавяления кнопок меню, добавления колонок грида, заполнения данными, выгрузка в ексель, выбор поведения (возврат выбранного элемента/элементов или просто показ их) ...
И от базового класса наследуешься, переопределяешь заполнение, добавление добавляешь нужные колонки, выбираешь поведение - всё справочник готов.
однотиптые справочники штампуются за минукту.
...
Рейтинг: 0 / 0
23.11.2009, 18:31
    #36326732
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
Не только форма не должна знать про данные, но и класс(ViewModel) не должен знать о форме.
авторсохранения размеров окна и колонок в гриде, скрытия/отображения/добавяления кнопок меню, добавления колонок грида, подобного функционала он не должен содержать.
...
Рейтинг: 0 / 0
23.11.2009, 18:57
    #36326785
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
SeVaНе только форма не должна знать про данные, но и класс(ViewModel) не должен знать о форме.
Одновременно друг о друге совсем не знать они не могут. Для случая MVVM, View все знает о ViewModel, ViewModel ничего не знает о View.
...
Рейтинг: 0 / 0
23.11.2009, 20:54
    #36327005
koJIo6ok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
господа, планета в опасности, а вы...
ну помогите связать DataTable и DataGrid
я сделал
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
ds.Tables.Add("plg");
// plg
ds.Tables[0].Columns.Add("id_plg", typeof(int));
ds.Tables[0].Columns.Add("id_org_ob", typeof(int));
ds.Tables[0].Columns.Add("plan_o", typeof(decimal)).DefaultValue = 0;
ds.Tables[0].Columns.Add("obor_o", typeof(decimal)).DefaultValue = 0;
ds.Tables[0].PrimaryKey = new DataColumn[] { ds.Tables[0].Columns[0] };
ds.Tables[0].Columns[0].AutoIncrement = true;
ds.Tables[0].Columns[0].AutoIncrementSeed = -1;
ds.Tables[0].Columns[0].AutoIncrementStep = -1;            
ds.Tables[0].Columns[1].Unique = true;
ds.Tables[0].Columns[2].AllowDBNull = false;
ds.Tables[0].Columns[3].AllowDBNull = false;
ds.EnforceConstraints = true;
// список 
ds.Tables.Add("sp");
ds.Tables[1].Columns.Add("id", typeof(int));
ds.Tables[1].Columns.Add("name", typeof(string));            
ds.Tables[1].PrimaryKey = new DataColumn[] { ds.Tables[1].Columns[0] };
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void frmObjectOrgPlg_Loaded(object sender, RoutedEventArgs e)
        {
            dsSelect();
            myDgColumnAdd();
            myDg.DataContext = ds.Tables[0];
            Binding bind = new Binding()
            {
                Mode = BindingMode.TwoWay,
                Path = new PropertyPath(".")
            };

            myDg.SetBinding(DataGrid.ItemsSourceProperty, bind);     
        }   
Код: 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.
void myDgColumnAdd()
{            
   Binding bind;            
   // 0 комбобокс
   DataGridComboBoxColumn cbCol = new DataGridComboBoxColumn { Header = "Название организации" };
   cbCol.ItemsSource = ds.Tables[1].Rows;
   cbCol.SelectedValuePath = "[0]";
   cbCol.DisplayMemberPath = "[1]";
   bind = new Binding("[1]")
      {                
         Mode = BindingMode.TwoWay                
      };
   cbCol.SelectedValueBinding = bind;           
   myDg.Columns.Add(cbCol);                
   // 2
   bind = new Binding("[2]")
      {
         Converter = new myConverter(),
         ConverterParameter = "{0:N1}",
         Mode = BindingMode.TwoWay
      };
   bind.ValidationRules.Add(new AllDecimalRule(0, 999999999.9m));
   Style st = new Style();
   Setter settet = new Setter(DataGridCell.HorizontalAlignmentProperty, HorizontalAlignment.Stretch);
   st.Setters.Add(settet);
   DataGridTextColumn txtCol = new DataGridTextColumn { Header = "план на год, руб.", Binding = bind, CellStyle = st };
   myDg.Columns.Add(txtCol);      
   // 3
   bind = new Binding("[3]")
   {
      Converter = new myConverter(),
      ConverterParameter = "{0:N1}",
      Mode = BindingMode.TwoWay
   };
   bind.ValidationRules.Add(new AllDecimalRule(0, 999999999.9m));
   txtCol = new DataGridTextColumn { Header = "в т.ч. оборудование, руб.", Binding = bind, CellStyle = st };
   myDg.Columns.Add(txtCol);
}

но ограничения на таблице не работают, не подставляются значения по умолчанию в новую строку - привязка только в одну сторону выходит? в две не вышло из-за -
автор
Для появления уведомления об изменении привязки клиента и источника данных связанный тип должен:
Либо реализовать интерфейс INotifyPropertyChanged (предпочтительный вариант).
Либо обеспечить событие изменения для каждого свойства связанного типа.
Либо не выполнять ни то, ни другое.
...
Рейтинг: 0 / 0
23.11.2009, 22:48
    #36327115
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
Roman S. GolubinSeVaНе только форма не должна знать про данные, но и класс(ViewModel) не должен знать о форме.
Одновременно друг о друге совсем не знать они не могут. Для случая MVVM, View все знает о ViewModel, ViewModel ничего не знает о View.
Что знает подобное View о ViewModel?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<navigation:Page x:Class="Shell.UIShell" 
///////        
   Title="UIShell Page">
    <Grid x:Name="LayoutRoot" Background="Black">
                <ItemsControl x:Name="MainRegion" cal:RegionManager.RegionName="MainRegion" />
                <ItemsControl x:Name="ActionsPaneRegion" cal:RegionManager.RegionName="ActionsPaneRegion" />
    </Grid>
</navigation:Page>

...
Рейтинг: 0 / 0
24.11.2009, 01:53
    #36327282
SokolNik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
SeVa,

зачем ты с мусей общаешься
он ж дебил
...
Рейтинг: 0 / 0
24.11.2009, 08:25
    #36327403
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
SokolNikSeVa,

зачем ты с мусей общаешься
он ж дебил
Я и сам себе такой вопрос задаю, но достала эта хамка трамвайная.
...
Рейтинг: 0 / 0
24.11.2009, 08:31
    #36327411
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
DATAGRID_WPFПомнится в WinForms у DataGridView был виртуальный режим отображения данных http://msdn.microsoft.com/ru-ru/library/ms171622.aspx. Есть ли что-то подобное у DataGrid в WPF? Если нет, то каким же образом, например, обрабатывать крупные объёмы данных?
PS Про то, что грузить на клиента большое кол-во записей нет смысла, знаю!
Виртуализация данных в WPF не поддерживается контролами,народ изголяется по-разному
Инетерсная статья на эту тему Data virtualization .
...
Рейтинг: 0 / 0
24.11.2009, 09:17
    #36327457
koJIo6ok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
спасибо что не отказали
...
Рейтинг: 0 / 0
24.11.2009, 10:24
    #36327602
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGrid + WPF
SeVaЧто знает подобное View о ViewModel?
Есть ли у этого View вообще ViewModel?
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / DataGrid + WPF / 25 сообщений из 43, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]