[英]passing selecteditems to a stored procedure from wpf datagrid through mvvm
[英]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.