Der*_*ser 5 c# sql-server wpf xaml 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);
}
Run Code Online (Sandbox Code Playgroud)
数据网格:
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));
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
还有这个:
DataClasses1DataContext context = new DataClasses1DataContext();
Run Code Online (Sandbox Code Playgroud)
问题是,当我运行程序并单击一行时,我收到此消息框:
You have chosen: CompanyRapport.GetRapport3Result
Run Code Online (Sandbox Code Playgroud)
GetRapport3 是我用来查找数据以填充数据网格的存储过程的名称。我只想从特定单元格中获取值。
我对整个 WPF(真正编码为一个整体)很陌生,所以请简单解释一下。感谢您的时间和耐心。
编辑:
无论单击哪个单元格/行,基本上输出都完全相同。它始终是“CompanyRapport.GetRapport3Result”。我希望它是数据库中特定表中的特定属性,或者至少是单击的单元格中的值。
小智 2
你的代码几乎是正确的。只需替换代码中的以下行即可
var Selected = dataGrid1.SelectedItem;
MessageBox.Show(string.Format("You have chosen: {0}", Selected));
Run Code Online (Sandbox Code Playgroud)
与以下三行代码
var Selected = (GetRapport3Result) dataGrid1.SelectedItem;
MessageBox.Show(string.Format("You have chosen: {0}", Selected));
MessageBox.Show(string.Format("You have chosen: {0}", Selected.Id));
Run Code Online (Sandbox Code Playgroud)
这应该足以让您在第二个消息框中看到该行返回的数据。我假设您的存储过程中有一个名为Id的列。您应该使用存储过程返回数据的现有属性。
说明: 您将整个对象作为参数传递到消息框。为了能够在消息框中显示您的对象,您的对象Selected被转换为字符串(或Selected.ToString()),这将输出存储过程的输出的类的名称,在本例中为CompanyRapport.GetRapport3Result。
将对象作为参数传递将不会显示该行的数据,这就是为什么您认为该行中的正确数据永远不会显示的原因。然而,数据就在那里,但您将整个对象传递到消息框。只需传递具有指定属性的对象(在上面的示例中Id),您就应该看到数据。
我已将dataGrid1.SelectedItem转换为与存储过程结果相同的类型,以便轻松访问数据中的所有属性。
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |