如何向datagridview添加上一个和下一个按钮

时间:2016-02-01 22:08:32

标签: c# winforms datagridview

我正在使用Visual Studio 2012并制作了一个Windows窗体应用程序,其中一个窗体我使用的是datagridview,它显示了SQL数据库中表的信息。

我已经自动将表格加载信息从datagridview行直接导入到文本框中。

SqlDataAdapter SDA = new SqlDataAdapter("SELECT * FROM Stock", con);
DataTable DATA = new DataTable();
SDA.Fill(DATA);
dataGridView1.DataSource = DATA

txtStock3.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
Descriptioncombo2.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
txtprice2.Text = dataGridView1.SelectedRows[0].Cells[2].Value.ToString();

问题是我需要添加上一个按钮和下一个按钮,以便用户可以浏览datagridview行,并在datagridview行的每一列的文本框中查看信息。我已经查看了类似的问题并浏览了互联网以寻找解决我问题的方法,但我似乎无法找到适用于我的代码的方法。您还可以告诉我如何添加一行代码,告诉用户如果他们单击数据库的所有行,则不会再选择行。

4 个答案:

答案 0 :(得分:4)

提供导航的一种方法是使用BindingNavigator,您可以在其中删除不必要的按钮,对于TextBox,您可以使用数据绑定。

负责加载数据的代码。根据需要更换catch中的console.writeline,例如:写入日志文件等。

public class DataOperations
{
    public DataTable LoadCustomers()
    {
        DataTable dtCustomers = new DataTable();

        using (SqlConnection cn = new SqlConnection(Properties.Settings.Default.ConnectionString))
        {
            string commandText = @"SELECT [Identfier], [CompanyName],[ContactName],[ContactTitle] FROM [NORTHWND1.MDF].[dbo].[Customers]";

            using (SqlCommand cmd = new SqlCommand(commandText, cn))
            {
                try
                {
                    cn.Open();
                    dtCustomers.Load(cmd.ExecuteReader());
                    dtCustomers.Columns["Identfier"].ColumnMapping = MappingType.Hidden;
                    dtCustomers.Columns["ContactTitle"].ColumnMapping = MappingType.Hidden;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }

        return dtCustomers;
    }
}

在表单上,​​一个BindingNavigator,一个dataGridView,一个TextBox

DataOperations dataOps = new DataOperations();
BindingSource bsCustomers = new BindingSource();
bsCustomers.DataSource = dataOps.LoadCustomers();
dataGridView1.DataSource = bsCustomers;
bindingNavigator1.BindingSource = bsCustomers;
txtContactTitle.DataBindings.Add("Text", bsCustomers, "ContactTitle");

BindingNavigator的替代方法是使BindingSource表单级私有变量。然后在按钮中调用BindingSource.Move方法,例如bsCustomers.MoveFirst()。当然还有MoveNext,MoveLast和MovePrevious。

答案 1 :(得分:2)

//first

int i = 0;
  this.dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[dataGridView1.CurrentCell.ColumnIndex];


//prev 

  int prev = dataGridView1.CurrentRow.Index - 1;
            if (prev >= 0)
            {
                this.dataGridView1.CurrentCell = dataGridView1.Rows[prev].Cells[dataGridView1.CurrentCell.ColumnIndex];
                //MessageBox.Show(dataGridView1[0, dataGridView1.CurrentRow.Index].Value.ToString());
            }


//next
     int next = dataGridView1.CurrentRow.Index + 1;
            if (next < dataGridView1.Rows.Count)
            {
                this.dataGridView1.CurrentCell = dataGridView1.Rows[next].Cells[dataGridView1.CurrentCell.ColumnIndex];
                //MessageBox.Show(dataGridView1[0, dataGridView1.CurrentRow.Index].Value.ToString());
            }
//last
     int i = dataGridView1.Rows.Count - 1;
            if (i < dataGridView1.Rows.Count)
            {
                this.dataGridView1.CurrentCell = dataGridView1.Rows[i].Cells[dataGridView1.CurrentCell.ColumnIndex];
                //MessageBox.Show(dataGridView1[0, dataGridView1.CurrentRow.Index].Value.ToString());
            }

答案 2 :(得分:1)

您可以将网格中的comulmns配置为匹配类型。然后在查询之后将数据绑定到此gridView。你添加了两个按钮,其中&#34; next&#34;按钮将获取网格的当前选定行,并将其设置为所选择的跟随者。以前会做相反的事情。这是一个小屁股的痛苦。我讨厌WinForms中的网格。过去4年,因为我没有看到它们,是我生命中最幸福的岁月

答案 3 :(得分:1)

作为Karen解决方案的替代方案,如果您愿意/必须使用按钮进行导航,那么您将要处理CurrentCellChanged事件以及以下按钮{{1} } events:

Click

private void DataGridView1_CurrentCellChanged(object sender, EventArgs e) { if (this.dataGridView1.CurrentRow != null) { txtStock3.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString(); Descriptioncombo2.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString(); txtprice2.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString(); this.prevButton.Enabled = this.dataGridView1.CurrentRow.Index > 0; this.nextButton.Enabled = this.dataGridView1.CurrentRow.Index < this.dataGridView1.Rows.Count - 1; } } private void PrevButton_Click(object sender, EventArgs e) { int prev = this.dataGridView1.CurrentRow.Index - 1; this.dataGridView1.CurrentCell = this.dataGridView1.Rows[prev].Cells[this.dataGridView1.CurrentCell.ColumnIndex]; } private void NextButton_Click(object sender, EventArgs e) { int next = this.dataGridView1.CurrentRow.Index + 1; this.dataGridView1.CurrentCell = this.dataGridView1.Rows[next].Cells[this.dataGridView1.CurrentCell.ColumnIndex]; } 事件将处理逻辑,如果您可以单击上一页下一页。它们各自的点击事件只是将当前单元格向后或向前移动一行。