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

пятница, 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

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

  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. Этот комментарий был удален автором.

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