滚动到datagridview中的最后一行 [英] Scroll to the last row in a datagridview

查看:170
本文介绍了滚动到datagridview中的最后一行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

运行此代码会产生此错误:



类型'System.InvalidOperationException'的未处理异常;发生在System.Windows.Forms.dll



附加信息:没有空间可以显示行。



我要做的就是确保网格中的最后一行显示!



如果您有任何提示,请告诉我们。





Running this code produces this error:

An unhandled exception of type 'System.InvalidOperationException'; occurred in System.Windows.Forms.dll

Additional information: No room is available to display rows.

All I'm trying to do is make sure the last row in the grid is showing!

If you have any tips please let me know.


using AccountsController.Properties;
using SJS;
using SJS.NewAccounts;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.Windows.Forms;

namespace AccountsController.Controls
{
    [Developer("Alan Hauxwell")]
    [Copyright("SarahSoft", "2016")]
    [History("28/11/16 Created")]
    public class HistoryEditor : EditorBaseControl
    {
        #region Constructor

        public HistoryEditor(IAccount account) : base() {
            if (account == null) {
                throw new ArgumentNullException("account");
            }
            Account = account;
            BindingSource.DataSource = account.Transactions;
            Text = Resources.History;
            EditVisible = false;
            PanelEnabled = true;
        }

        #endregion

        #region Events

        public override event EventHandler<ListItemEventArgs> ListItemDoubleClick;

        #endregion

        #region Members

        private DataGridView dataView = new DataGridView();
        private DataGridViewTextBoxColumn categoryColumn = new DataGridViewTextBoxColumn();
        private DataGridViewTextBoxColumn dateColumn = new DataGridViewTextBoxColumn();
        private DataGridViewTextBoxColumn referenceColumn = new DataGridViewTextBoxColumn();
        private DataGridViewTextBoxColumn detailsColumn = new DataGridViewTextBoxColumn();
        private DataGridViewTextBoxColumn folioColumn = new DataGridViewTextBoxColumn();
        private DataGridViewTextBoxColumn drColumn = new DataGridViewTextBoxColumn();
        private DataGridViewTextBoxColumn crColumn = new DataGridViewTextBoxColumn();
        private DataGridViewTextBoxColumn balanceColumn = new DataGridViewTextBoxColumn();

        #endregion

        #region Properties

        public IAccount Account {
            get;
        }

        /// <summary>
        /// Get SelectedItem property 
        /// </summary>
        public ITransaction SelectedItem {
            get {
                if (dataView.Rows.Count > 0) {
                    return dataView.SelectedRows[0].DataBoundItem as ITransaction;
                }
                return null;
            }
        }

        #endregion

        #region Raise Events

        private void DataViewCellDoubleClick(object sender, DataGridViewCellEventArgs e) {
            if (SelectedItem != null) {
                EventHandler<ListItemEventArgs> temp = ListItemDoubleClick;
                if (temp != null)
                    temp(this, new ListItemEventArgs(SelectedItem));
            }
        }

        #endregion

        #region Helpers

        private void DataViewCellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
            // Blank zero values in Dr and Cr columns.
            if (e.ColumnIndex == drColumn.Index || e.ColumnIndex == crColumn.Index) {
                if (Convert.ToDecimal(e.Value, CultureInfo.InvariantCulture) == 0M) {
                    e.Value = null;
                }
            }
        }

        protected void SelectLastItem() {
            if (dataView.Rows.Count > 0 && Created) {
                dataView[0, dataView.Rows.Count - 1].Selected = true;
                //BindingSource.MoveLast();
                dataView.FirstDisplayedScrollingRowIndex = dataView.SelectedRows[0].Index;
            }
        }

        #endregion

        #region Component Designer

        protected override void InitializeComponent() {
            base.InitializeComponent();
            ((ISupportInitialize)(dataView)).BeginInit();
            SuspendLayout();

            DataGridViewCellStyle headerStyle = new DataGridViewCellStyle();
            DataGridViewCellStyle defaultStyle = new DataGridViewCellStyle();
            DataGridViewCellStyle moneyStyle = new DataGridViewCellStyle();

            headerStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
            headerStyle.BackColor = SystemColors.Control;
            headerStyle.Font = new Font("Consolas", 11F, FontStyle.Regular);
            headerStyle.ForeColor = SystemColors.WindowText;
            headerStyle.SelectionBackColor = SystemColors.Highlight;
            headerStyle.SelectionForeColor = SystemColors.HighlightText;
            headerStyle.WrapMode = DataGridViewTriState.True;

            defaultStyle.Alignment = DataGridViewContentAlignment.TopLeft;
            defaultStyle.BackColor = Color.SlateBlue;
            defaultStyle.Font = new Font("Consolas", 10F, FontStyle.Regular);
            defaultStyle.ForeColor = Color.Black;
            defaultStyle.SelectionBackColor = SystemColors.Highlight;
            defaultStyle.SelectionForeColor = SystemColors.HighlightText;
            defaultStyle.WrapMode = DataGridViewTriState.True;

            moneyStyle.Alignment = DataGridViewContentAlignment.TopRight;
            moneyStyle.BackColor = Color.SlateBlue;
            moneyStyle.Font = new Font("Consolas", 10F, FontStyle.Regular);
            moneyStyle.ForeColor = Color.Black;
            moneyStyle.Format = "N2";
            moneyStyle.SelectionBackColor = SystemColors.Highlight;
            moneyStyle.SelectionForeColor = SystemColors.HighlightText;
            moneyStyle.WrapMode = DataGridViewTriState.False;

            dataView.AllowUserToAddRows = false;
            dataView.AllowUserToDeleteRows = false;
            dataView.AllowUserToResizeColumns = false;
            dataView.AllowUserToResizeRows = false;
            dataView.AutoGenerateColumns = false;
            dataView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
            dataView.BackgroundColor = Color.SlateBlue;
            dataView.BorderStyle = BorderStyle.None;
            dataView.CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal;
            dataView.ColumnHeadersDefaultCellStyle = headerStyle;
            dataView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            dataView.Columns.AddRange(new DataGridViewColumn[] { categoryColumn, dateColumn, referenceColumn, detailsColumn, folioColumn, drColumn, crColumn, balanceColumn });
            dataView.DataSource = BindingSource;
            dataView.DefaultCellStyle = defaultStyle;
            dataView.Dock = DockStyle.Fill;
            dataView.EnableHeadersVisualStyles = false;
            dataView.Location = new Point(0, 23);
            dataView.MultiSelect = false;
            dataView.ReadOnly = true;
            dataView.RowHeadersVisible = false;
            dataView.ScrollBars = ScrollBars.Vertical;
            dataView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dataView.Size = new Size(650, 358);
            dataView.TabIndex = 10;
            dataView.CellDoubleClick += new DataGridViewCellEventHandler(DataViewCellDoubleClick);
            dataView.CellFormatting += new DataGridViewCellFormattingEventHandler(DataViewCellFormatting);
            BindingSource.DataSource = typeof(TransactionCollection);

            categoryColumn.DataPropertyName = "Category";
            categoryColumn.HeaderText = Resources.Cat;
            categoryColumn.ReadOnly = true;
            categoryColumn.Width = 70;

            dateColumn.DataPropertyName = "TransactionDate";
            dateColumn.HeaderText = Resources.Date;
            dateColumn.ReadOnly = true;

            referenceColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            referenceColumn.DataPropertyName = "Reference";
            referenceColumn.HeaderText = Resources.Reference;
            referenceColumn.ReadOnly = true;
            referenceColumn.Width = 95;

            detailsColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            detailsColumn.DataPropertyName = "Details";
            detailsColumn.HeaderText = Resources.Details;
            detailsColumn.ReadOnly = true;

            folioColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            folioColumn.DataPropertyName = "Folio";
            folioColumn.HeaderText = Resources.Folio;
            folioColumn.ReadOnly = true;

            drColumn.DataPropertyName = "DR";
            drColumn.DefaultCellStyle = moneyStyle;
            drColumn.HeaderText = Resources.Debit;
            drColumn.ReadOnly = true;

            crColumn.DataPropertyName = "CR";
            crColumn.DefaultCellStyle = moneyStyle;
            crColumn.HeaderText = Resources.Credit;
            crColumn.ReadOnly = true;

            balanceColumn.DataPropertyName = "Balance";
            balanceColumn.DefaultCellStyle = moneyStyle;
            balanceColumn.HeaderText = Resources.Balance;
            balanceColumn.ReadOnly = true;

            PanelControls.Add(dataView);

            ((ISupportInitialize)(dataView)).EndInit();
            ResumeLayout(false);
        }

        #endregion
    }
}





我尝试过的事情:



这就是我的意思尝试:





What I have tried:

This is what I've tried:

Running this code: 
        protected void SelectLastItem() {
    if (dataView.Rows.Count > 0 && Created) {
        dataView[0, dataView.Rows.Count - 1].Selected = true;
        //BindingSource.MoveLast();
        dataView.FirstDisplayedScrollingRowIndex = dataView.SelectedRows[0].Index;
    }
}

The line 
dataView.FirstDisplayedScrollingRowIndex = dataView.SelectedRows[0].Index;
Causes the error.

推荐答案

我认为你应该尝试:

I think you should try:
dataView.FirstDisplayedScrollingRowIndex = dataView.RowCount-1;


这篇关于滚动到datagridview中的最后一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆