Question

J'ai un problème.Mon code contient DataGridView et Indépendant CheckBoxColumn.Mon dialogue devrait être de choisir des chambres de la liste.Pour la deuxième fois, vous voulez voir ce que vous avez choisi dans la première fois.

Code:

ChooseGroupRoomDialog.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BE; // My namespace
using ListExtensions; // My namespace

namespace PLForms
{
    public partial class ChooseGroupRoomsDialog : Form
    {
        public List<Room> Value
        {
            get
            {
                List<Room> retList = new List<Room>();
                for (int i = 0; i < table.RowCount; i++)
                {
                    DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)table[chooseColumnIndex, i];
                    if (cell.Value != null && (bool)cell.Value)
                        retList.Add((Room)table.Rows[i].DataBoundItem);
                }
                return retList;
            }
            set
            {
                List<Room> data = (List<Room>)(table.DataSource);
                foreach (Room room in value)
                {
                    int index = data.FindIndex(roomA => roomA.Id == room.Id);
                    if (index != -1)
                    {
                        table[index, chooseColumnIndex].Value = true; //Not working!!
                    }
                }
            }
        }
        private int chooseColumnIndex;
        public ChooseGroupRoomsDialog(List<Room> dataSource)
        {
            InitializeComponent();
            table.DataSource = dataSource.ToList();
            DialogResult = DialogResult.Cancel;
            foreach (DataGridViewColumn col in table.Columns)
                col.ReadOnly = true;
            chooseColumnIndex = chooseColumn.Index;
            chooseColumn.ReadOnly = false;
        }

        private void okButton_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.OK;
            this.Close();
        }

        private void cancelButton_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

ChooseGroupRoomDialog.Le concepteur.cs

namespace PLForms
{
    partial class ChooseGroupRoomsDialog
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
            this.table = new System.Windows.Forms.DataGridView();
            this.roomBindingSource = new System.Windows.Forms.BindingSource(this.components);
            this.okButton = new System.Windows.Forms.Button();
            this.cancelButton = new System.Windows.Forms.Button();
            this.chooseColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn();
            this.idDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.numberOfBedsDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.typeOfRoomStringDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.viewingSeaDataGridViewCheckBoxColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn();
            this.costDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.jakuziDataGridViewCheckBoxColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn();
            this.numberOfWindowsDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.airConditionedDataGridViewCheckBoxColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn();
            this.cleaningDateDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.landScapeDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
            ((System.ComponentModel.ISupportInitialize)(this.table)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.roomBindingSource)).BeginInit();
            this.SuspendLayout();
            // 
            // table
            // 
            this.table.AllowUserToAddRows = false;
            this.table.AllowUserToDeleteRows = false;
            this.table.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
            | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.table.AutoGenerateColumns = false;
            this.table.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            this.table.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
            this.chooseColumn,
            this.idDataGridViewTextBoxColumn,
            this.numberOfBedsDataGridViewTextBoxColumn,
            this.typeOfRoomStringDataGridViewTextBoxColumn,
            this.viewingSeaDataGridViewCheckBoxColumn,
            this.costDataGridViewTextBoxColumn,
            this.jakuziDataGridViewCheckBoxColumn,
            this.numberOfWindowsDataGridViewTextBoxColumn,
            this.airConditionedDataGridViewCheckBoxColumn,
            this.cleaningDateDataGridViewTextBoxColumn,
            this.landScapeDataGridViewTextBoxColumn});
            this.table.DataSource = this.roomBindingSource;
            dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
            dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window;
            dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(177)));
            dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText;
            dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.GradientInactiveCaption;
            dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.ControlText;
            dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
            this.table.DefaultCellStyle = dataGridViewCellStyle1;
            this.table.Location = new System.Drawing.Point(129, 12);
            this.table.MultiSelect = false;
            this.table.Name = "table";
            this.table.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
            this.table.Size = new System.Drawing.Size(1047, 372);
            this.table.TabIndex = 1;
            // 
            // roomBindingSource
            // 
            this.roomBindingSource.DataSource = typeof(BE.Room);
            // 
            // okButton
            // 
            this.okButton.Location = new System.Drawing.Point(12, 12);
            this.okButton.Name = "okButton";
            this.okButton.Size = new System.Drawing.Size(111, 44);
            this.okButton.TabIndex = 2;
            this.okButton.Text = "אישור";
            this.okButton.UseVisualStyleBackColor = true;
            this.okButton.Click += new System.EventHandler(this.okButton_Click);
            // 
            // cancelButton
            // 
            this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            this.cancelButton.Location = new System.Drawing.Point(12, 62);
            this.cancelButton.Name = "cancelButton";
            this.cancelButton.Size = new System.Drawing.Size(111, 44);
            this.cancelButton.TabIndex = 2;
            this.cancelButton.Text = "ביטול";
            this.cancelButton.UseVisualStyleBackColor = true;
            this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
            // 
            // chooseColumn
            // 
            this.chooseColumn.HeaderText = "בחירה";
            this.chooseColumn.Name = "chooseColumn";
            this.chooseColumn.Width = 70;
            // 
            // idDataGridViewTextBoxColumn
            // 
            this.idDataGridViewTextBoxColumn.DataPropertyName = "Id";
            this.idDataGridViewTextBoxColumn.HeaderText = "מספר זיהוי";
            this.idDataGridViewTextBoxColumn.Name = "idDataGridViewTextBoxColumn";
            // 
            // numberOfBedsDataGridViewTextBoxColumn
            // 
            this.numberOfBedsDataGridViewTextBoxColumn.DataPropertyName = "NumberOfBeds";
            this.numberOfBedsDataGridViewTextBoxColumn.HeaderText = "מספר מיטות";
            this.numberOfBedsDataGridViewTextBoxColumn.Name = "numberOfBedsDataGridViewTextBoxColumn";
            // 
            // typeOfRoomStringDataGridViewTextBoxColumn
            // 
            this.typeOfRoomStringDataGridViewTextBoxColumn.DataPropertyName = "TypeOfRoomString";
            this.typeOfRoomStringDataGridViewTextBoxColumn.HeaderText = "סוג חדר";
            this.typeOfRoomStringDataGridViewTextBoxColumn.Name = "typeOfRoomStringDataGridViewTextBoxColumn";
            this.typeOfRoomStringDataGridViewTextBoxColumn.ReadOnly = true;
            // 
            // viewingSeaDataGridViewCheckBoxColumn
            // 
            this.viewingSeaDataGridViewCheckBoxColumn.DataPropertyName = "ViewingSea";
            this.viewingSeaDataGridViewCheckBoxColumn.HeaderText = "נוף לים";
            this.viewingSeaDataGridViewCheckBoxColumn.Name = "viewingSeaDataGridViewCheckBoxColumn";
            this.viewingSeaDataGridViewCheckBoxColumn.Width = 70;
            // 
            // costDataGridViewTextBoxColumn
            // 
            this.costDataGridViewTextBoxColumn.DataPropertyName = "Cost";
            this.costDataGridViewTextBoxColumn.HeaderText = "מחיר";
            this.costDataGridViewTextBoxColumn.Name = "costDataGridViewTextBoxColumn";
            this.costDataGridViewTextBoxColumn.ReadOnly = true;
            // 
            // jakuziDataGridViewCheckBoxColumn
            // 
            this.jakuziDataGridViewCheckBoxColumn.DataPropertyName = "Jakuzi";
            this.jakuziDataGridViewCheckBoxColumn.HeaderText = "ג\'קוזי";
            this.jakuziDataGridViewCheckBoxColumn.Name = "jakuziDataGridViewCheckBoxColumn";
            this.jakuziDataGridViewCheckBoxColumn.Width = 70;
            // 
            // numberOfWindowsDataGridViewTextBoxColumn
            // 
            this.numberOfWindowsDataGridViewTextBoxColumn.DataPropertyName = "NumberOfWindows";
            this.numberOfWindowsDataGridViewTextBoxColumn.HeaderText = "מספר חלונות";
            this.numberOfWindowsDataGridViewTextBoxColumn.Name = "numberOfWindowsDataGridViewTextBoxColumn";
            // 
            // airConditionedDataGridViewCheckBoxColumn
            // 
            this.airConditionedDataGridViewCheckBoxColumn.DataPropertyName = "AirConditioned";
            this.airConditionedDataGridViewCheckBoxColumn.HeaderText = "מיזוג אוויר";
            this.airConditionedDataGridViewCheckBoxColumn.Name = "airConditionedDataGridViewCheckBoxColumn";
            this.airConditionedDataGridViewCheckBoxColumn.Width = 80;
            // 
            // cleaningDateDataGridViewTextBoxColumn
            // 
            this.cleaningDateDataGridViewTextBoxColumn.DataPropertyName = "CleaningDate";
            this.cleaningDateDataGridViewTextBoxColumn.HeaderText = "תאריך ניקיון";
            this.cleaningDateDataGridViewTextBoxColumn.Name = "cleaningDateDataGridViewTextBoxColumn";
            // 
            // landScapeDataGridViewTextBoxColumn
            // 
            this.landScapeDataGridViewTextBoxColumn.DataPropertyName = "LandScape";
            this.landScapeDataGridViewTextBoxColumn.HeaderText = "איכות נוף";
            this.landScapeDataGridViewTextBoxColumn.Name = "landScapeDataGridViewTextBoxColumn";
            this.landScapeDataGridViewTextBoxColumn.Width = 90;
            // 
            // ChooseGroupRoomsDialog
            // 
            this.AcceptButton = this.okButton;
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.CancelButton = this.cancelButton;
            this.ClientSize = new System.Drawing.Size(1190, 399);
            this.Controls.Add(this.cancelButton);
            this.Controls.Add(this.okButton);
            this.Controls.Add(this.table);
            this.Name = "ChooseGroupRoomsDialog";
            this.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
            this.RightToLeftLayout = true;
            this.Text = "בחר חדרים";
            ((System.ComponentModel.ISupportInitialize)(this.table)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.roomBindingSource)).EndInit();
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.BindingSource roomBindingSource;
        private System.Windows.Forms.DataGridView table;
        private System.Windows.Forms.Button okButton;
        private System.Windows.Forms.Button cancelButton;
        private System.Windows.Forms.DataGridViewCheckBoxColumn chooseColumn;
        private System.Windows.Forms.DataGridViewTextBoxColumn idDataGridViewTextBoxColumn;
        private System.Windows.Forms.DataGridViewTextBoxColumn numberOfBedsDataGridViewTextBoxColumn;
        private System.Windows.Forms.DataGridViewTextBoxColumn typeOfRoomStringDataGridViewTextBoxColumn;
        private System.Windows.Forms.DataGridViewCheckBoxColumn viewingSeaDataGridViewCheckBoxColumn;
        private System.Windows.Forms.DataGridViewTextBoxColumn costDataGridViewTextBoxColumn;
        private System.Windows.Forms.DataGridViewCheckBoxColumn jakuziDataGridViewCheckBoxColumn;
        private System.Windows.Forms.DataGridViewTextBoxColumn numberOfWindowsDataGridViewTextBoxColumn;
        private System.Windows.Forms.DataGridViewCheckBoxColumn airConditionedDataGridViewCheckBoxColumn;
        private System.Windows.Forms.DataGridViewTextBoxColumn cleaningDateDataGridViewTextBoxColumn;
        private System.Windows.Forms.DataGridViewTextBoxColumn landScapeDataGridViewTextBoxColumn;
    }
}
Était-ce utile?

La solution

Quelque chose de bizarre qui se passe que je ne peux pas cerner.Lorsque j'ai mis un point d'arrêt sur votre //Not working!! ligne, en le passant dans un artificiel liste de deux pièces de cinq, que je suis le remplissage avec, la fenêtre affiche le type de table[index, chooseColumn.Index] en tant que DataGridViewTextBoxCell la première fois et un DataGridViewCheckBoxCell la deuxième, et je ne suis même pas sûr de savoir comment c'est possible.

EDIT:Je viens de comprendre comment c'est possible.Vous avez la colonne et la ligne des indices en arrière.Votre travail non-ligne de commande:

table[chooseColumn.Index, index].Value = true; //Working!!

MODIFIER À NOUVEAU:OK, mon précédent conjectures et un lien vers cette réponse ont également été nécessaires.Vous devez fixer l'ordre d'index ET de définir la valeur de la cellule à true dans le DataBindingComplete gestionnaire:

    List<Room> _value;
    public List<Room> Value
    {
        get
        {
            List<Room> retList = new List<Room>();
            for (int i = 0; i < table.RowCount; i++)
            {
                DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)table[chooseColumn.Index, i];
                if (cell.Value != null && (bool)cell.Value)
                    retList.Add((Room)table.Rows[i].DataBoundItem);
            }
            return retList;
        }
        set
        {
            _value = value;
        }
    }

    private void table_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        if (_value == null) return;
        List<Room> data = (List<Room>)(table.DataSource);
        foreach (Room room in _value)
        {
            int index = data.FindIndex(roomA => roomA.Id == room.Id);
            if (index != -1)
            {
                table[chooseColumn.Index, index].Value = true; //Working!!
            }
        }
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top