簡體   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