wpf datagrid selectionchanged




DataGrid WPF에서 선택된 행 항목 가져 오기 (8)

Fara의 대답을 시도한 후에 이걸 발견했지만 프로젝트에서는 작동하지 않았습니다. 데이터 소스 창에서 열을 끌어서 레이블 또는 텍스트 상자로 놓기 만하면됩니다.

데이터베이스 테이블에 바인딩 된 DataGrid 가 있는데 DataGrid 에서 선택한 행의 내용을 가져와야합니다. 예를 들어 선택한 행의 MessageBox 내용에 표시하려고합니다.

DataGrid 예제 :

따라서 두 번째 행을 선택하면 MessageBox 다음과 같은 내용이 표시됩니다. 646 Jim Biology .


MVVM 패턴을 사용하는 경우 VM의 SelectedRecord 속성을 DataGrid의 SelectedItem 과 바인딩 할 수 있습니다.이 방법을 사용하면 항상 VM에서 SelectedValue 를 사용할 수 있습니다. 그렇지 않으면 DataGrid의 SelectedIndex 속성을 사용해야합니다.


Model 클래스를 사용하여 DataGrid에서 선택한 행 값을 가져 오거나,

        XDocument xmlDoc = XDocument.Load(filepath);

        if (tablet_DG.SelectedValue == null)
        {
            MessageBox.Show("select any record from list..!", "select atleast one record", MessageBoxButton.OKCancel, MessageBoxImage.Warning);
        }
        else
        {
            try
            {
                string tabletID = "";

                 /*here i have used my model class named as TabletMode*/

                var row_list = (TabletModel)tablet_DG.SelectedItem; 
                 tabletID= row_list.TabletID;

                var items = from item in xmlDoc.Descendants("Tablet")
                            where item.Element("TabletID").Value == tabletID
                            select item;

                foreach (var item in items)
                {
                    item.SetElementValue("Instance",row_list.Instance);
                    item.SetElementValue("Database",row_list.Database);
                }

                xmlDoc.Save(filepath);
                MessageBox.Show("Details Updated..!"
                + Environment.NewLine + "TabletId: " +row_list.TabletID + Environment.NewLine
                + "Instance:" + row_list.Instance + Environment.NewLine + "Database:" + row_list.Database, "", MessageBoxButton.YesNoCancel, MessageBoxImage.Information);
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.StackTrace);
            }
        }

SelectedItem 속성을 사용하여 현재 선택한 개체를 가져올 수 있습니다. 그러면이 개체를 올바른 형식으로 캐스팅 할 수 있습니다. 예를 들어, DataGrid가 Customer 객체의 컬렉션에 바인딩되어 있으면 다음 작업을 수행 할 수 있습니다.

Customer customer = (Customer)myDataGrid.SelectedItem;

또는 SelectedItem을 소스 클래스 또는 ViewModel에 바인딩 할 수 있습니다.

<Grid DataContext="MyViewModel">
    <DataGrid ItemsSource="{Binding Path=Customers}"
              SelectedItem="{Binding Path=SelectedCustomer, Mode=TwoWay}"/>
</Grid>    

당신은 또한 수:

DataRowView row = dataGrid.SelectedItem as DataRowView;
MessageBox.Show(row.Row.ItemArray[1].ToString());

두 번째 행을 선택하면

 Dim jason As DataRowView


    jason = dg1.SelectedItem

    noteText.Text = jason.Item(0).ToString()

note 텍스트는 646이 될 것입니다. 이것은 VB이지만 이해할 수 있습니다.


private void Fetching_Record_Grid_MouseDoubleClick_1(object sender, MouseButtonEventArgs e)
{
    IInputElement element = e.MouseDevice.DirectlyOver;
    if (element != null && element is FrameworkElement)
    {
        if (((FrameworkElement)element).Parent is DataGridCell)
        {
            var grid = sender as DataGrid;
            if (grid != null && grid.SelectedItems != null && grid.SelectedItems.Count == 1)
            {
                //var rowView = grid.SelectedItem as DataRowView;
                try
                {
                    Station station = (Station)grid.SelectedItem;
                    id_txt.Text =  station.StationID.Trim() ;
                    description_txt.Text =  station.Description.Trim();
                }
                catch
                {

                }
            }
        }
    }
}

public IEnumerable<DataGridRow> GetDataGridRows(DataGrid grid)
{
    var itemsSource = grid.ItemsSource as IEnumerable;
    if (null == itemsSource) yield return null;
    foreach (var item in itemsSource)
    {
        var row = grid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
        if (null != row) yield return row;
    }
}

private void DataGrid_Details_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    try
    {           
        var row_list = GetDataGridRows(DataGrid_Details);
        foreach (DataGridRow single_row in row_lis)
        {
            if (single_row.IsSelected == true)
            {
                MessageBox.Show("the row no."+single_row .GetIndex ().ToString ()+ " is selected!");
            }
        }

    }
    catch { }
}




selecteditem