Содержание блога

пятница, 27 августа 2010 г.

DataGrid - рецепты по приготовлению

DataGrid очень мощная штука, можно переменную хранящую структурированные данные присвоить значению  dataGridPkt.ItemsSource = PrjProperty.CurrentPiketList;
и таблица уже сама готова... определены поля, заполнены записи...

в принципе уже с этим можно работать... но если нужно приложению придать более дружелюбный вид, то можно внести несколько изменений...

Свой набор полей(Заголовки)
Если при использовании DataGrid, у нас определен класс, которым будет заполняться таблица. можно указать только те поля которые мы будем использовать.
пусть у нас есть класс
PiketList, с полями (ID(int),FROM(string),TO(string),IsPiket(bool),x(double),y(double),z(double) )

Используя механизм Binding можно указать поля которые хотим вывести, для логического типа красивее использовать data:DataGridCheckBoxColumn

<data:DataGrid Grid.Row="1" Name="dataGridPkt" AutoGenerateColumns="False" >
  <data:DataGrid.Columns>

     <data:DataGridTextColumn Binding="{Binding ID}" Header="№"/>
     <data:DataGridTextColumn Binding="{Binding FROM}" Header="От"/>
     <data:DataGridTextColumn Binding="{Binding TO}" Header="До"/>
     <!-- флажок -->
     <data:DataGridCheckBoxColumn Binding="{Binding IsPiket}" Header="Пикет"/>


  </data:DataGrid.Columns>
</data:DataGrid>
теперь при использовании команды
dataGridPkt.ItemsSource = PrjProperty.CurrentPiketList;
будут заполнены указанные поля

Создание кнопки в поле.
для удаления записи можно описать кнопку в поле, и для каждой записи будет своя кнопочка
описание кнопки выглядит так
<data:DataGridTemplateColumn>
      <data:DataGridTemplateColumn.CellTemplate>
             <DataTemplate>
                   <Button x:Name="btnDelete" Content="Удл" Foreground="DarkBlue" Click="btnDelete_Click" >
                           <!-- Всплывающая подсказка -->
                           <ToolTipService.ToolTip>
                                 <ToolTip>
                                       <TextBlock Text="Удалить строчку" />
                                 </ToolTip>
                           </ToolTipService.ToolTip>
                   </Button>
              </DataTemplate>
         </data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
для обработки события нажатия на кнопку удаления
создадим окно на подтверждение
для этого добавим новый элемент в наш проект "Дочернее окно Silverligth" - ConfimDeleteRecord
в режиме кода
    public partial class ConfimDeleteRecord : ChildWindow
    {
        int index = 0;
        /// <summary>
        /// Конструктор окна подтверждения
        /// </summary>
        /// <param name="wtlt">Заголовок</param>
        /// <param name="msg">Сообщение</param>
        /// <param name="idx">номер </param>
        public ConfimDeleteRecord(string wtlt, string msg, int idx)
        {
            InitializeComponent();

            index = idx;
            this.Title = wtlt;
            this.Message.Text = msg;
        }

        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            PrjProperty.CurrentPiketList.RemoveAt(index);
            this.DialogResult = true;
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }
    }


в нашей странице теперь вызовем окно и создадим обработчик событий

        #region ConfimDeleteRecord_Closed -- Событие закрытия окна Удаления
        private void ConfimDeleteRecord_Closed(object sender, EventArgs e)
        {
            var result = ((ChildWindow)sender).DialogResult;
            if (result.HasValue)
            {
                //результат нажатия кнопки OK/Cancel у нас в result.Value
                if (result.Value == true)
                {
                    textBlockStatus.Text = "Запись удалена";
                    refreshTable();
                }
            }
        }
        #endregion ConfimDeleteRecord_Closed

        #region btnDelete_Click -- Удалить запись
        private void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            int i = dataGridPkt.SelectedIndex;
            ConfimDeleteRecord del = new ConfimDeleteRecord("Удаление записи...", "Вы действительно желаете удалить запись № " + i, i);
            del.Closed += new EventHandler(ConfimDeleteRecord_Closed);
            del.Show();
        }
        #endregion btnDelete_Click

3 комментария:

  1. Awesome article. It is so detailed and well formatted that i enjoyed reading it as well as get some new information too.


    SAP HR training in Chennai

    ОтветитьУдалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
  3. Digging through old blog posts like this one is a great reminder of how Linux and Android’s open nature taught us to build our own solutions, like tethering for Xbox. Now I focus on building data pipelines and predictive models. I recently completed a data science course with real time projects electronic city bangalore to help me apply those same analytical skills to real-world big data problems. It is awesome to see how our tinkering days as "Android hobbyists" can evolve into professional data science roles. Thanks for sharing!

    ОтветитьУдалить