c#使用主键查找数据表中的行(包含在不同的类中)

本文关键字:包含 查找 数据表 | 更新日期: 2023-09-27 18:14:49

这是关于DataTable的,而不是数据库。

我已经学习了一整天了,现在关于如何搜索DataTable我已经看到了很多不同的答案,但仍然对如何在DataTable的类之外的DataTable中通过主键找到一行感到困惑。我希望我能使用数据库,但是我的个人教育还没有达到那个水平。

几件事:

  • 这是WPF应用程序的一部分
  • 搜索作为按钮事件的结果发生
  • DataTable包含在它自己的类(MainDataTable.cs)
  • 按钮和搜索方法包含在它们自己的类中(Page2.xaml.cs)
  • 我漏掉了XAML。如果有必要,我可以显示它。

MainDataTable.cs(其中包含DataTable)

public class MainDataTable
{
    public static DataTable dataMain = new DataTable("Customer Info Database");
    public static void CreateTable1()
    {
        dataMain.Columns.Add("CustID", typeof(int));
        dataMain.PrimaryKey = new DataColumn[] { dataMain.Columns["ID"] };
        dataMain.Columns.Add("CustName", typeof(string));
        dataMain.Columns.Add("CustAge", typeof(int));
        dataMain.Columns.Add("CustAlign", typeof(string));      
    }
    public static void EnterNewRows(int CustID, string CustName, int CustAge, string CustAlign)
    {
        dataMain.Rows.Add(CustID, CustName, CustAge, CustAlign);
    }
}

Page2.xaml.cs

public partial class Page2 : Page
{
    public Page2()
    {
        InitializeComponent();
    }
    private void SearchBtn1Clk(object sender, RoutedEventArgs e, MainDataTable Data1)
    {
        //This is where I attempted several methods unsuccessfully
        //The button is supposed to read text from the text box and then
        //through .Text set it to an int which can then be used by the 
        //search method to match up with the Primary Key in an if statement     
    }
}
如果你还需要其他信息,请告诉我。谢谢! 编辑:对我的问题的建议答案是不充分的,因为它仍然没有解释如何跨类做任何解决方案。

EDIT2:好吧,我算出了一个组件,但是它导致了一个奇怪的错误。

修订Page2.xaml.cs

public partial class Page2 : Page
{
    public Page2()
    {
        InitializeComponent();
    }
    private void SearchBtn1Clk(object sender, RoutedEventArgs e)
    {
        int IDFind = Convert.ToInt32(searchIdTxtBox.Text);
        DataRow foundRow = MainDataTable.dataMain.Rows.Find(IDFind);
        if (foundRow != null)
        {
            MessageBox.Show(foundRow[0].ToString());
        }
        else
        {
            MessageBox.Show("No Customer Found with ID:" + IDFind);
        }
    }
}

值正确地存储在表中,但是当单击search时,会发生以下错误:

未处理的System.Data类型异常。在System.Data.dll中发生了MissingPrimaryKeyException附加信息:表没有主键

c#使用主键查找数据表中的行(包含在不同的类中)

DataTable.Select(...)将根据您提供的查询过滤器返回一组DataRow

https://msdn.microsoft.com/en-us/library/det4aw50 (v = vs.110) . aspx

另一个选择是使用DataView.RowFilter

https://msdn.microsoft.com/en-us/library/system.data.dataview (v = vs.110) . aspx

我想对您说的第一件事是,您应该放弃使用DataTable和friends作为持久化信息的主要方式。数据库并没有那么复杂,而这正是您需要的方向。抓一个教程,直接进入。

你需要知道的另一件事是,在最近的DotNet版本中(我认为是Core),数据集和数据表甚至不再受支持。

查看您的代码,您应该能够使用:

MainDataTable.dataMain

但是我必须强调你的做法是错误的。把你的数据放到IEnumerable中,或者更好的是放到Observable Collection中。是的,这是学习,但学习是值得的……

好运。