繁体   English   中英

WPF从datagrid获取数据存储过程

[英]WPF get data from datagrid something stored procedure

我有一个文本框,你输入一个数字,这是有效的。

我有一个数据网格,它使用基于文本框中的数字的存储过程从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”。 我希望它是来自数据库中特定表的特定属性,或者至少是单击的单元格中的值。

你的代码几乎是正确的。 只需从代码中替换下面的行

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

用以下三行代码

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

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

说明:您将作为参数传递给消息框,即整个对象。 为了能够在消息框中显示您的对象,您的对象Selected被转换为字符串(或Selected.ToString() ),它将输出存储过程的输出类的名称,在本例中为CompanyRapport.GetRapport3Result

将对象作为参数传递将不会显示行的数据,这就是为什么您认为从未显示行中的正确数据的原因。 但是,数据存在,但您将整个对象传递到消息框。 只需使用指定的属性传递对象(在上面的Id示例中),您应该看到数据。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM