2017-10-12 68 views
4

我有一个文本框,你输入一个数字,这个工程。WPF从datagrid获取数据东西存储过程

我有一个数据网格,从MSSQL数据库中利用基于文本框中编号的存储过程提取数据,这是有效的。

现在我想单击一行并将数据库中的特定值写入消息箱,但这不起作用。

这里是代码:

文本框:

private void TextChanged(object sender, TextChangedEventArgs e) 
    {    
     int parsedValue; 

     if (!int.TryParse(textBox.Text, out parsedValue)) 
     { 
      return; 
     } 
     int a = Convert.ToInt32(textBox.Text); 
     dataGrid1.ItemsSource = context.GetRapport3(a); 
    } 

数据网格:

private void MouseDC(object sender, MouseButtonEventArgs e) 
    { 
     if (dataGrid1.SelectedItem == null) 
     { 
      return; 
     } 
     var Selected = dataGrid1.SelectedItem; 
     MessageBox.Show(string.Format("You have chosen: {0}", Selected));    
    } 

的XAML:

<Window x:Class="NolekRapport.MainWindow" 
    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" 
    xmlns:local="clr-namespace:NolekRapport" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <DataGrid x:Name="dataGrid1" HorizontalAlignment="Left" Margin="83,104,0,0" VerticalAlignment="Top" MouseDoubleClick="MouseDC" /> 
    <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="83,65,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120" TextChanged="TextChanged"/> 
    <Label x:Name="label" Content="Search:" HorizontalAlignment="Left" Margin="19,65,0,0" VerticalAlignment="Top"/> 
</Grid> 

也有是这样的:

DataClasses1DataContext context = new DataClasses1DataContext(); 

问题是,当我运行一个行程序,点击我得到这个消息框:

You have chosen: CompanyRapport.GetRapport3Result 

GetRapport3是存储过程我用的名字找到数据来填充数据网格。我想只是从特定的单元格中获取值。

我对整个WPF(真正的编码作为一个整体)都很新,所以请简单说明一下。感谢您的时间和耐心。

编辑:

基本上输出是完全一样的,不管什么单元行点击/上。它始终是“CompanyRapport.GetRapport3Result”。我希望它是来自数据库中特定表的特定属性,或者是单击单元格中的至少一个值。

回答

2

你的代码几乎是正确的。只是下面三行代码

var Selected = (GetRapport3Result) dataGrid1.SelectedItem; 
MessageBox.Show(string.Format("You have chosen: {0}", Selected)); 
MessageBox.Show(string.Format("You have chosen: {0}", Selected.Id)); 

替换下面几行从您的代码

var Selected = dataGrid1.SelectedItem; 
MessageBox.Show(string.Format("You have chosen: {0}", Selected)); 

这应该足以让你看到由行的第二个消息框返回的数据。我假定您的存储过程中有一列名为Id。您应该使用存储过程中返回数据的现有属性。

说明: 要传递到消息框,作为参数,你的整个对象。为了能够在消息框中显示对象,您的对象选中的被投射为字符串(或Selected.ToString()),它将输出存储过程的输出类的名称,在这种情况下是CompanyRapport.GetRapport3Result

传递的对象作为参数不会显示该行的数据,这就是为什么你认为永远不会显示从该行的正确数据。但是,这些数据是有的,但你通过整个对象的消息框。只是通过与(以上标识中的例子)指定的属性的对象,你应该看到的数据。

我已经将dataGrid1.SelectedItem与您的存储过程的结果类型相同,以便轻松访问数据中的所有属性。