Перейти к записи в базе данных в C # - PullRequest
2 голосов
/ 04 декабря 2011

Вот некоторая предыстория того, за чем я следовал.

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 ]

0 голосов
/ 04 декабря 2011

Использовать привязку данных вместо того, чтобы присваивать значения вручную элементам управления.

  1. создать класс модели
public class MyClass  
{  
    public string Maker { get; set; }  
    public double price { get; set; }  
    // and so on, for all your fields  
}
  1. Добавить данные объектаисточник для MyClass в проводнике «Источники данных» в Visual Studio.

  2. Перетащите поля формы Источники данных в форму.Visual Studio автоматически добавляет BindingSource и BindingNavigator в вашу форму.

  3. Назначьте свои данные для BindingSource в форме:

this.bindingSource1.DataSource = myData;

Где myData - это некоторое перечисление объектов MyClass.

Вы можете сделать это и для источников базы данных.Но лично я предпочитаю иметь свои данные в классахЭто легче обрабатывать, чем манипулировать DataSets или полями формы напрямую.

0 голосов
/ 04 декабря 2011

Исходя из вашего описания, я думаю, что это то, что вы хотите

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...