앞에서 실습했던 "DataGrid 컨트롤로 데이터 출력하기"에다 "현재 선택된 행 가져오기"기능을 추가하기 위하여, "RiaDataGrid"파일을 복사해서 쓰지 않고 다시 열어서 실습하였다.






[MainPage.xaml]


<UserControl

xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  x:Class="RiaDataGrid.MainPage"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    mc:Ignorable="d"

    d:DesignHeight="300" d:DesignWidth="400">

 

    <Grid x:Name="LayoutRoot" Background="White">

        <StackPanel>

            <my:DataGrid x:Name="ctlMemoList" AutoGenerateColumns="True"></my:DataGrid>

            <my:DataGrid x:Name="ctlMemoList2" AutoGenerateColumns="False">

                <my:DataGrid.Columns>

                    <my:DataGridTextColumn Header="번호" Binding="{Binding Num}"></my:DataGridTextColumn>

                    <my:DataGridTemplateColumn Header="이름">

                        <my:DataGridTemplateColumn.CellTemplate>

                            <DataTemplate>

                                <TextBlock Text="{Binding Name}" Foreground="Blue" />

                            </DataTemplate>

                        </my:DataGridTemplateColumn.CellTemplate>

                    </my:DataGridTemplateColumn>

                </my:DataGrid.Columns>

            </my:DataGrid>

            <Button x:Name="btnGet" Content="현재 선택된 가져오기" />

        </StackPanel>

    </Grid>

</UserControl>

 

 








[MainPage.xaml.cs]


using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using System.Collections.ObjectModel;

 

namespace RiaDataGrid

{

    public partial class MainPage : UserControl

    {

        public MainPage()

        {

            InitializeComponent();

 

            this.Loaded += new RoutedEventHandler(MainPage_Loaded);

            btnGet.Click += new RoutedEventHandler(btnGet_Click);

            ctlMemoList2.SelectionChanged += new SelectionChangedEventHandler(ctlMemoList2_SelectionChanged);

        }

        // 행을 선택하자마자 선택된 행을 보여주기

        void ctlMemoList2_SelectionChanged(object sender, SelectionChangedEventArgs e)

        {

            btnGet_Click(null, null);

        }

        // 현재 선택된 행을 가져오려면???

        void btnGet_Click(object sender, RoutedEventArgs e)

        {

            if (ctlMemoList2.SelectedIndex != -1) // 선택되었다면...

            {

                // SelectedItem으로 현재 선택된 행을 가져와서 Memo 타입으로 변경 대입

                Memo m = ctlMemoList2.SelectedItem as Memo;

                MessageBox.Show(String.Format("번호 : {0}, 이름 : {1}", m.Num, m.Name));

            }

        }

        void MainPage_Loaded(object sender, RoutedEventArgs e)

        {

            FuncList();

            FuncObservable();

        }

 

        private void FuncObservable()

        {

            ObservableCollection<Memo> lst = new ObservableCollection<Memo>();

 

            lst.Add(new Memo() { Num = 1, Name = "홍길동" });

            lst.Add(new Memo() { Num = 2, Name = "백두산" });

            lst.Add(new Memo() { Num = 3, Name = "한라산" });

 

            this.ctlMemoList2.ItemsSource = lst;

        }

 

        private void FuncList()

        {

            List<Memo> lst = new List<Memo>();

 

            lst.Add(new Memo() { Num = 1, Name = "홍길동" });

            lst.Add(new Memo() { Num = 2, Name = "백두산" });

            lst.Add(new Memo() { Num = 3, Name = "한라산" });

 

            this.ctlMemoList.ItemsSource = lst;

        }

    }

 

    public class Memo

    {

        public int Num { get; set; }

        public string Name { get; set; }

    }

}

 

 
















Posted by holland14
: