2016-11-03 12 views
1

У меня это событие на кнопке, нажмите ниже:BindingSource не переходит к следующей записи MoveNext() после того, как TableAdapter.Fill

private void button4_Click(object sender, EventArgs e) 
{ 
    string connectionString2 = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True"; 
    string query2 = "UPDATE Liguanea_Lane2 SET Progress= '1' where code = '" + comboBox2.Text + "'; "; 
    using (SqlConnection connection = new SqlConnection(connectionString2)) 
    { 
     SqlCommand command = new SqlCommand(query2, connection); 
     command.Connection.Open(); 
     command.ExecuteNonQuery(); 
    } 
    comboBox2.ResetText(); 
    textBox1.Clear(); 
    comboBox2.SelectedIndex = comboBox2.SelectedIndex + 1; 
    this.liguanea_Lane2TableAdapter.Fill(this.pharmaciesDataSet3.Liguanea_Lane2); 
    liguaneaLane2BindingSource.MoveNext(); 
} 

Проблема заключается в частности блок кода:

this.liguanea_Lane2TableAdapter.Fill(this.pharmaciesDataSet3.Liguanea_Lane2); 
liguaneaLane2BindingSource.MoveNext(); 

Что он делает, это в основном обновление источника данных в сетке данных и переход к следующему элементу таблицы. Например, после щелчка кнопки он обновляет значение столбца «прогресс» до «1», а затем обновляет набор данных, а затем вызывает .MoveNext, чтобы переместить курсор на следующий элемент в таблице. Он работает, но выполняет только один раз и затем останавливается. Набор данных обновляется отлично, но проблема .MoveNext. Я пытаюсь переместить его выше набора данных, но затем он не выполняет проблему. Что я делаю не так?

ответ

1

Когда вы звоните TableAdapter.Fill(Table), это вызывает BindingSource, который связывается с Table переходит к первой записи. Поэтому вызов bindingSource.MoveNext() после заполнения таблицы всегда переходит к второй записи.

Если по какой-либо причине вы хотите, чтобы перейти к следующей записи после заполнения таблицы с помощью таблицы адаптера, сохранить текущую позицию перед заливкой и установить позицию для следующей записи после заполнения:

int current = 0; 
private void Button1_Click(object sender, EventArgs e) 
{ 
    current = bindingSource1.Position; 
    tableAdapter1.Fill(dataSet1.Table1); 
    bindingSource1.Position = Math.Min(current + 1, bindingSource1.Count - 1); 
} 
+0

кажется логически, что является что будет всегда. Я ранил, предпочитал .MoveNext будет продолжать с того места, где, несмотря на вызов источника привязки – Jevon

+0

Я добавил обходной путь для него. –

+0

Спасибо, он работает. Вы заслуживаете награды. Просто отметили его как ответ – Jevon

 Смежные вопросы

  • Нет связанных вопросов^_^