none
Работа с DataGrid в Silverlight RRS feed

  • Вопрос

  • Доброе время суток!

    Я новичок в Silverlight, помогите, пожалуйста, в одной проблеме.

    Есть DataGrid он заполняется данными, всё нормально.

    Задача проста: при выборе строки (кликаем мышкой), считывать данные из определённой ячейки выделенной строки в textbox. Перерыл много статей в интернете но работающего решения так и не нашёл.

    1 декабря 2011 г. 15:40

Ответы

  • > DataGrid заполняется данными полученых из сервиса, свойство Prop1 не нашёл.


    данные - это коллекция объектов. у объектов есть свойства. вместо Prop1 надо указать название свойства объекта.
      
    <UserControl
    	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    	xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
    	xmlns:local="clr-namespace:SilverlightApplication1"
    	x:Class="SilverlightApplication1.MainPage"
    	Width="640" Height="480">
    
    	<StackPanel>
    		<sdk:DataGrid  Margin="10" AutoGenerateColumns="True" x:Name="dg" 
    			ItemsSource="{Binding Data}" RowHeight="25" SelectedIndex="0" >
    			<sdk:DataGrid.DataContext>
    				<local:Model/>
    			</sdk:DataGrid.DataContext>
    		</sdk:DataGrid>	
    		<TextBlock Text="{Binding Path=SelectedItem.Data, ElementName=dg}" />				
    	</StackPanel>
    </UserControl>
    
    using System;
    using System.Collections.Generic;
    using System.Windows;
    using System.Windows.Controls;
    
    namespace SilverlightApplication1
    {
    	public partial class MainPage : UserControl
    	{
    		public MainPage()
    		{
    			InitializeComponent();
    		}
    	}
    	public class Model
    	{
    		public Model()
    		{
    			this.Data = new [] 
    			{
    				new { Id=1, Data="d1" },
    				new { Id=2, Data="d2" },
    			};
    		}
    		public object Data { get; private set; }
    	}
    }
    
       
    2 декабря 2011 г. 6:32

Все ответы

  • Вот статья про реализацию двойного клика http://www.dansoltesz.com/post/2010/02/19/Silverlight-datagrid-double-click-behavior.aspx

    Думаю переделать это на одинарный клик не составит труда.

    1 декабря 2011 г. 16:34
  • > при выборе строки (кликаем мышкой), считывать данные из определённой ячейки выделенной строки в textbox. Перерыл много статей в интернете но работающего решения так и не нашёл.

    если DataGrid привязан к данным (например, коллекция объектов; у объекта есть свойство Prop1), то TextBox.Text можно привязать к текущему элементу в DataGrid.
    примерно так делается в wpf. скорее всего, что в silverlight также:

    <DataGrid ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" x:Name="dg" />
    <TextBox Text="{Binding ElementName=dg, Path=SelectedItem.Prop1}" />
    
     

    1 декабря 2011 г. 16:52
  • Здравствуйте! Спасибо всем кто откликнулся.

    DataGrid заполняется данными полученых из сервиса, свойство Prop1 не нашёл.

    в событии мышки пишу textBox1.Text = DataGrid1.SelectedItem.ToString()  или  textBox1.DataContext= DataGrid1.SelectedItem

    результата нет, DataGrid1.SelectedItem возвращает объект DataGrid1 и данных по текущей строке я там не нашёл. Может что-то не так делаю, подскажите, спасибо

    1 декабря 2011 г. 21:47
  • > DataGrid заполняется данными полученых из сервиса, свойство Prop1 не нашёл.


    данные - это коллекция объектов. у объектов есть свойства. вместо Prop1 надо указать название свойства объекта.
      
    <UserControl
    	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    	xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
    	xmlns:local="clr-namespace:SilverlightApplication1"
    	x:Class="SilverlightApplication1.MainPage"
    	Width="640" Height="480">
    
    	<StackPanel>
    		<sdk:DataGrid  Margin="10" AutoGenerateColumns="True" x:Name="dg" 
    			ItemsSource="{Binding Data}" RowHeight="25" SelectedIndex="0" >
    			<sdk:DataGrid.DataContext>
    				<local:Model/>
    			</sdk:DataGrid.DataContext>
    		</sdk:DataGrid>	
    		<TextBlock Text="{Binding Path=SelectedItem.Data, ElementName=dg}" />				
    	</StackPanel>
    </UserControl>
    
    using System;
    using System.Collections.Generic;
    using System.Windows;
    using System.Windows.Controls;
    
    namespace SilverlightApplication1
    {
    	public partial class MainPage : UserControl
    	{
    		public MainPage()
    		{
    			InitializeComponent();
    		}
    	}
    	public class Model
    	{
    		public Model()
    		{
    			this.Data = new [] 
    			{
    				new { Id=1, Data="d1" },
    				new { Id=2, Data="d2" },
    			};
    		}
    		public object Data { get; private set; }
    	}
    }
    
       
    2 декабря 2011 г. 6:32
  • Уважаемый пользователь,

    Пожалуйста, не забывайте отмечать ответы, решающие проблему (кнопка Пометить как ответ).

    Спасибо.


    Для связи [mail]
    19 декабря 2011 г. 3:44
    Модератор