Перейти к записи базы данных в C#
Вот некоторые сведения о том, за чем я следил.
http://www.homeandlearn.co.uk/csharp/csharp_s12p9.html
Это будет идти к последней или первой записи базы данных. Я хочу пропустить запись в базе данных доступа, которую хочет пользователь, введя идентификационный номер в текстовое поле, и тогда в текстовые поля будет помещена правильная строка.
Я думаю, что я могу использовать этот код с сайта выше. Я реализовал все остальное с сайта выше.
Глобальная переменная
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);
}
}
2 ответа
Исходя из вашего описания, я думаю, что это то, что вы хотите
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);
}
Используйте привязку данных вместо того, чтобы присваивать значения вручную элементам управления.
- создать модельный класс
public class MyClass
{
public string Maker { get; set; }
public double price { get; set; }
// and so on, for all your fields
}
Добавьте объектный источник данных для MyClass в проводнике "Источники данных" в Visual Studio.
Перетащите поля из источников данных в форму. Visual Studio автоматически добавляет в форму BindingSource и BindingNavigator.
Присвойте свои данные BindingSource в форме:
this.bindingSource1.DataSource = myData;
Где myData - это некоторое перечисление объектов MyClass.
Вы можете сделать это и для источников в базе данных. Но лично я предпочитаю, чтобы мои данные были на занятиях. Это легче обрабатывать, чем манипулировать DataSets или полями формы напрямую.