使用带有DataTable的DataRow foundRow时出现未处理的异常

时间:2016-10-26 19:33:38

标签: c# xaml datatable primary-key unhandled-exception

这又是一个DataTable,而不是数据库。

少数事情:

  • 这是WPF应用程序的一部分
  • 由于按钮事件而发生搜索
  • DataTable包含在自己的类(MainDataTable.cs
  • DataTable由文本输入('Page1.xaml.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);
    }
}

Page1.xaml.cs

public partial class Page1 : Page
{
    public Page1()
    {
        InitializeComponent();
    }

    private void Finished_Button(object sender, RoutedEventArgs e)
    {
        int ParseID;
        int ParseAge;
        bool Parse1 = int.TryParse(txtID.Text, out ParseID);
        bool Parse2 = int.TryParse(txtAge.Text, out ParseAge);           

        MainDataTable.CreateTable1();
        MainDataTable.EnterNewRows(ParseID, txtName.Text, ParseAge, txtAlignment.Text);

        this.NavigationService.Navigate(new Page0());

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);
        }
    }
}

值正确地从Page1.xaml.cs文本输入存储在表中(我知道这是因为我在运行后检查了行),但是当单击搜索时,会发生以下错误:

System.Data.dll中出现未处理的“System.Data.MissingPrimaryKeyException”类型异常 附加信息:表没有主键。

1 个答案:

答案 0 :(得分:0)

您没有名为ID的专栏。它被称为CustID。不是吗?更新此行,然后重试。

 dataMain.PrimaryKey = new DataColumn[] { dataMain.Columns["CustID"] };

除非你想要完成别的事情。