c# -跳过数据库中的ID
本文关键字:ID 数据库 | 更新日期: 2023-09-27 18:16:43
我快要放弃了。连续5个小时尝试了很多东西。我什么也想不起来。
我有一个c#应用程序,可以添加记录,从数据库中删除记录。它还可以在文本框中显示项目,我可以使用"下一步"answers"上一步"按钮来导航项目。例如下面的Next按钮 private void btnNext_Click(object sender, EventArgs e)
{
if (inc != MaxRows - 1)
{
inc++;
NavigateRecords();
}
else
{
MessageBox.Show("You have reached the end of available items", "End of Available Items", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
MaxRows = this
MaxRows = ds1.Tables["Laptops"].Rows.Count;
我在上面调用的方法是NavigateRecords,代码在这里
private void NavigateRecords()
{
DataRow dRow = ds1.Tables["Laptops"].Rows[inc];
txtMaker.Text = ds1.Tables["Laptops"].Rows[inc].ItemArray.GetValue(1).ToString();
txtModel.Text = ds1.Tables["Laptops"].Rows[inc].ItemArray.GetValue(2).ToString();
txtPrice.Text = ds1.Tables["Laptops"].Rows[inc].ItemArray.GetValue(3).ToString();
txtBids.Text = ds1.Tables["Laptops"].Rows[inc].ItemArray.GetValue(4).ToString();
txtScreen.Text = ds1.Tables["Laptops"].Rows[inc].ItemArray.GetValue(5).ToString();
txtCPU.Text = ds1.Tables["Laptops"].Rows[inc].ItemArray.GetValue(6).ToString();
txtMemory.Text = ds1.Tables["Laptops"].Rows[inc].ItemArray.GetValue(7).ToString();
txtHD.Text = ds1.Tables["Laptops"].Rows[inc].ItemArray.GetValue(8).ToString();
picLaptops.Image = Image.FromFile(ds1.Tables["Laptops"].Rows[inc].ItemArray.GetValue(9).ToString());
}
我在我的Access数据库中有一个自动编号ID字段,用户应该能够跳过(通过在文本框中输入ID)并在不同的文本框中显示适当的记录(参考NavigateRecords)
我的问题是,我该怎么做呢?我需要在NavigateRecords的文本框中显示正确的行,这也将更新全局设置为0的"inc"变量。例如,如果用户启动程序并跳过说id 7,它将显示该记录,但当它这样做时,inc也应该更新行号,以便如果我单击下一步,它将带我到id 8而不是id 2…如果这说得通的话。
private void btnSkip_Click(object sender, EventArgs e)
{
string searchFor = txtSkip.Text;
DataRow[] Skip;
int results = 0;
Skip = ds1.Tables["Laptops"].Select("ID='" + searchFor + "'");
results = Skip.Length;
if (results > 0)
{
DataRow dr1;
for (int i = 0; i < MaxRows; i++)
{
// who knows what to do here.... or getting every row is even the right thing to do...
}
}
else
{
MessageBox.Show("No item found");
}
}
修改第二个代码示例:
private void btnSkip_Click(object sender, EventArgs e)
{
string searchFor = txtSkip.Text;
DataRow[] target = ds1.Tables["Laptops"].Select("ID='" + searchFor + "'");
// I suspect that this should really not be a string, so ("ID=" + searchFor);
if (target.Count() == 1) {
inc = ds1.Tables["Laptops"].Rows.IndexOf(target[0]);
NavigateRecords();
} else { //there can be no more than one row, so this means no matches
MessageBox.Show("No item found");
}
}
…这里假设ID是表中的唯一标识符。
看一下你的代码,在我看来,也许你应该在你的for循环中调用NavigateRecords()
此外,如果你刚刚进入UI开发,你可能想看看MVVM设计模式,特别是如果你使用WPF。如果您使用的是WinForms或其他工具,那么MVP模式可能值得一看。无论哪种方式,这些模式都有助于将表示从应用程序逻辑中分离出来,并可能简化此类问题。