如何从文本框中选择数据

时间:2016-12-28 17:38:46

标签: c# wpf entity-framework stored-procedures textbox

我使用模型优先方法创建了一个数据库。 我有三张桌子: Books属性BookID, Title. Authors属性AuthorID, Name, Surname. AuthorBook表,以便与属性AuthorBookID, AuthorID, BookID.建立多对多连接。所有这些表都有一些数据。 我有一个文本框,我想输入一本书的标题或本书作者的姓名或姓氏,所选的(按存储过程)项目将显示在DataGrid中。 我已经创建了一个存储过程,它在SQL Management Studio和Visual Studio脚本中成功完成了此功能。但我不知道如何通过代码使其工作以及如何正确使用它。

的Xaml:

<Canvas>
    <TextBox x:Name="SearchBox" Width="193" Height="32" Canvas.Left="38" Canvas.Top="38"></TextBox>
    <Button Name="SearchButton" Click="SearchButton_OnClick" Content="Search" Canvas.Left="204" Canvas.Top="80" Height="30" Width="64"></Button>
    <DataGrid x:Name="Info" ItemsSource="{Binding Path=Authorslist1}" Background="Honeydew" Canvas.Top="200" Canvas.Left="30" Width="259" Height="50" ></DataGrid>
</Canvas>

C#:

 public partial class UserPage : Window
{
    Model1Container db1 = new Model1Container();
    private MainWindow mv = new MainWindow();

    public UserPage(Model1Container d, MainWindow m)
    {
        InitializeComponent();
        DataContext = this;
        db1 = d;
        mv = m;
    }


    private void SearchButton_OnClick(object sender, RoutedEventArgs e)
    {


    }

脚本:

CREATE PROCEDURE [dbo].AuthorProcedure1 @name nvarchar(50) AS SELECT BookSet.Title, AuthorSet.Name, AuthorSet.Surname FROM [dbo].AuthorBookSet JOIN BookSet ON BookSet.BookID=AuthorBookSet.BookID JOIN AuthorSet ON AuthorSet.AuthorID=AuthorBookSet.AuthorID WHERE Title=@name GO

3 个答案:

答案 0 :(得分:1)

好的,总结了评论:

1)创建一个模型来保存结果(或使用匿名类型):

public class BookViewModel
{
    public string Title { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
}

2)设置参数并调用proc:

var bookTitle = new SqlParameter("@name", txtSearch.Text);
var result = context.Database.SqlQuery<BookViewModel>("AuthorProcedure1 @name", bookTitle).ToList();

答案 1 :(得分:0)

  

我可以这样写,只获得标题:

var bookTitle = new SqlParameter("@name", SearchBox.Text);
var result = db1.Database.SqlQuery<BookViewModel>("AuthorProcedure1 @name", bookTitle).ToList();
Info.ItemsSource = (from s in result group s by s.Title into res select new { MyTitle = res.Key }).ToList(); 
  

它通过绑定显示在datagrid中。以及如何获得作者?

将DataGrid的ItemsSource属性设置为List&lt; BookViewModel&gt;。此列表将包含从存储过程返回的作者:

var result = db1.Database.SqlQuery<BookViewModel>("AuthorProcedure1 @name", bookTitle).ToList();
Info.ItemsSource = result;
<DataGrid x:Name="Info" AutoGenerateColumns="False" Background="Honeydew" Canvas.Top="200" Canvas.Left="30" 
                  Width="259" Height="50" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Title" Binding="{Binding Title}" />
        <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
        <DataGridTextColumn Header="Surname" Binding="{Binding Surname}" />
    </DataGrid.Columns>
</DataGrid>

答案 2 :(得分:0)

以下是解决方案:

var animals = ["max": "z", "Royal": nil] //store key pairs