以下是我一直关注的一些背景知识。
http://www.homeandlearn.co.uk/csharp/csharp_s12p9.html
这将转到数据库的最后一条或第一条记录。我想通过在文本框中输入ID号来跳过用户想要的访问数据库中的记录,然后将正确的行放入文本框中。
我想我可以使用上述网站上的代码。我已经实现了上面网站上的所有其他内容。
全局变量
int inc = 0;
我稍后将在“跳过”按钮中调用的导航记录
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());
}
到目前为止我的跳过按钮......
private void btnSkip_Click(object sender, EventArgs e)
{
NavigateRecords();
}
我很难做到这一点。我知道我想要什么,但缺乏技术技能。这非常令人沮丧。我不知道该怎么做。
如果有人可以解决问题并向我展示代码,我就可以理解并在其他地方使用它。
以下是下一个按钮的示例,如果有帮助的话,可以转到下一条记录。
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);
}
}
答案 0 :(得分:0)
根据您的描述,我认为这就是您想要的
void btnNext_Click(object sender, EventArgs e) {
int id = Int32.Parse(yourIdTextBox.Text);
DataRow row = ds1.Tables["Laptops"].Rows.OfType<DataRow>()
.SingleOrDefault(r => (int)r.ItemArray[your id index] == id);
if (row == null)
{
//user typed in invalid row id
} else
processRow(row);
}
void processRow(DataRow row){
txtMaker.Text = row.ItemArray.GetValue(1).ToString();
txtModel.Text = row.ItemArray.GetValue(2).ToString();
txtPrice.Text = row.ItemArray.GetValue(3).ToString();
txtBids.Text = row.ItemArray.GetValue(4).ToString();
txtScreen.Text = row.ItemArray.GetValue(5).ToString();
txtCPU.Text = row.ItemArray.GetValue(6).ToString();
txtMemory.Text = row.ItemArray.GetValue(7).ToString();
txtHD.Text = row.ItemArray.GetValue(8).ToString();
picLaptops.Image = Image.FromFile(row.ItemArray.GetValue(9).ToString());
}
然后将NavigateRecors()方法简化为
private void NavigateRecords()
{
DataRow dRow = ds1.Tables["Laptops"].Rows[inc];
processRow(dRow);
}
答案 1 :(得分:0)
使用数据绑定,而不是手动为控件赋值。
public class MyClass
{
public string Maker { get; set; }
public double price { get; set; }
// and so on, for all your fields
}
在Visual Studio的“数据源”资源管理器中为MyClass添加对象数据源。
将数据源的字段拖到表单中。 Visual Studio会自动将BindingSource和BindingNavigator添加到表单中。
以下列形式将数据分配给BindingSource:
this.bindingSource1.DataSource = myData;
其中myData是MyClass对象的枚举。
您也可以为数据库源执行此操作。但我个人更喜欢在课堂上提供数据。比直接操作DataSet或表单字段更容易处理。