【问题标题】:Auto scroll the DataGridView does not work when AllowUserToAddRows = false当 AllowUserToAddRows = false 时自动滚动 DataGridView 不起作用
【发布时间】:2013-04-18 17:25:52
【问题描述】:

我想DataGridView只显示数据(只读),用户不能直接通过datagridview输入数据,而是通过DataSourceDataMember。为了防止用户输入数据,我确实设置了:

m_dView.AllowUserToAddRows = false;

为什么设置后DataGridView自动滚动不起作用?

m_dView.DataSource = ds;
m_dView.DataMember = dm;
m_dView.AutoGenerateColumns = true;
m_dView.MultiSelect = false;
m_dView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
m_dView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
m_dView.ReadOnly = true;
m_dView.AllowUserToAddRows = false;
m_dView.AllowUserToDeleteRows = false;
m_dView.AllowUserToOrderColumns = false;
m_dView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
m_dView.AllowUserToResizeColumns = false;
m_dView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
m_dView.AllowUserToResizeRows = false;
m_dView.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;

// auto scroll only worked only when m_dView.AllowUserToAddRows = true;
if (m_dView.Rows.Count > 0) {
    m_dView.CurrentCell = m_dView.Rows[m_dView.Rows.Count - 1].Cells[0];
}

【问题讨论】:

  • 你可以试试我提供的样品吗?
  • 我尝试了一切,但没有任何效果。

标签: c# datagridview autoscroll


【解决方案1】:

我创建了一个如下所示的代码示例,它运行良好。 如下图在新窗体上拖拽一个datagridview控件并命名为m_dView

创建了一个按钮,单击该按钮后我会运行下面的代码示例

using (SqlConnection c = new SqlConnection("Server=localhost;Database=deno;Trusted_Connection=True;"))
            {
                c.Open();

                using (SqlDataAdapter a = new SqlDataAdapter(
                    "SELECT * FROM test", c))
                {
                    // 3
                    // Use DataAdapter to fill DataTable
                    string dm = "TestScroll";
                    DataSet ds = new DataSet();
                    a.Fill(ds, dm);
                    // 4
                    // Render data onto the screen
                    m_dView.AllowUserToAddRows = false;
                    m_dView.DataSource = ds;
                    m_dView.DataMember = dm;
                    m_dView.AutoGenerateColumns = true;
                    m_dView.MultiSelect = false;
                    m_dView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                    m_dView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
                    m_dView.ReadOnly = true;
                    m_dView.AllowUserToAddRows = false;
                    m_dView.AllowUserToDeleteRows = false;
                    m_dView.AllowUserToOrderColumns = false;
                    m_dView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
                    m_dView.AllowUserToResizeColumns = false;
                    m_dView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
                    m_dView.AllowUserToResizeRows = false;
                    m_dView.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;

                }
                m_dView.FirstDisplayedScrollingRowIndex = m_dView.Rows.Count-1;
            }

我已使用 DataGridView.FirstDisplayedScrollingRowIndex 属性将 gridview 滚动到最后一行

例如

m_dView.FirstDisplayedScrollingRowIndex = m_dView.Rows.Count-1;

您可以将以下代码复制并粘贴到新项目中并进行测试吗?真正的罪魁祸首可能是其他问题。

【讨论】:

  • 谢谢。我尝试使用 m_dView.FirstDisplayedScrollingRowIndex = m_dView.Rows.Count - 1;但同样的结果,自动滚动不起作用。
  • 你可以试试 FirstDisplayedCell 选项吗?
  • 我试过 m_dView.FirstDisplayedCell = m_dView.CurrentCell;但同样的滚动,仍然无法正常工作。
  • 自动滚动仅在 m_dView.AllowUserToAddRows = true 时有效; m_dView.CurrentCell = m_dView.Rows[m_dView.Rows.Count - 1].Cells[0];但是当用户点击DataGridView的最后一行时出现问题,会出现错误。
  • 您尝试过我发给您的完整代码示例吗?您发布的代码对我来说很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 2023-02-08
  • 2022-11-11
  • 1970-01-01
相关资源
最近更新 更多