5

ここでは、バインディング ソース生成コードに DGV をバインドしています。

            // dgvDocumentList
        // 
        this.dgvDocumentList.AllowUserToAddRows = false;
        this.dgvDocumentList.AllowUserToDeleteRows = false;
        this.dgvDocumentList.AutoGenerateColumns = false;
        this.dgvDocumentList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        this.dgvDocumentList.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
        this.dMTitleDataGridViewTextBoxColumn,
        this.urlCol,
        this.idCol});
        this.dgvDocumentList.DataSource = this.docListFetchBindingSource;
        this.dgvDocumentList.Dock = System.Windows.Forms.DockStyle.Fill;
        this.dgvDocumentList.Location = new System.Drawing.Point(3, 3);
        this.dgvDocumentList.MultiSelect = false;
        this.dgvDocumentList.Name = "dgvDocumentList";
        this.dgvDocumentList.ReadOnly = true;
        this.dgvDocumentList.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
        this.dgvDocumentList.Size = new System.Drawing.Size(336, 493);
        this.dgvDocumentList.TabIndex = 0;
        this.dgvDocumentList.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvDocumentList_CellContentDoubleClick);
        this.dgvDocumentList.SelectionChanged += new System.EventHandler(this.dgvDocumentList_SelectionChanged);

列コードはこちらです。

  // dCBModLinkDataGridViewTextBoxColumn
        // 
        this.dCBModLinkDataGridViewTextBoxColumn.DataPropertyName = "DCBModLink";
        this.dCBModLinkDataGridViewTextBoxColumn.HeaderText = "DCBModLink";
        this.dCBModLinkDataGridViewTextBoxColumn.Name = "dCBModLinkDataGridViewTextBoxColumn";
        this.dCBModLinkDataGridViewTextBoxColumn.ReadOnly = true;
        this.dCBModLinkDataGridViewTextBoxColumn.Visible = false;
        // 
        // dCBIDDataGridViewTextBoxColumn
        // 
        this.dCBIDDataGridViewTextBoxColumn.DataPropertyName = "DCBID";
        this.dCBIDDataGridViewTextBoxColumn.HeaderText = "DCBID";
        this.dCBIDDataGridViewTextBoxColumn.Name = "dCBIDDataGridViewTextBoxColumn";
        this.dCBIDDataGridViewTextBoxColumn.ReadOnly = true;
        this.dCBIDDataGridViewTextBoxColumn.Visible = false;
        // 
        // eQModModelNumberDataGridViewTextBoxColumn
        // 
        this.eQModModelNumberDataGridViewTextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
        this.eQModModelNumberDataGridViewTextBoxColumn.DataPropertyName = "EQModModelNumber";
        this.eQModModelNumberDataGridViewTextBoxColumn.HeaderText = "Model Number";
        this.eQModModelNumberDataGridViewTextBoxColumn.Name = "eQModModelNumberDataGridViewTextBoxCol

ご覧のとおり、dcbModLinkDataGridViewTextBoxColumn の列定義には visble = false; と書かれています。これは、プロパティ テーブルにも記載されています。実行時にアプリケーションに表示されます。

リスト内の列の位置を変更すると、次の結果が得られます。列リストに表示される順序以外は変更されていません。

DCBID(可視)--DCBModLink(不可視)--EQModModelNumber(可視)

DCBModLink(可視)--DCBID(不可視)--EQModModelNumber(可視)

EQModModelNumber(可視)--EQModModelNumber(不可視)--DCBID(不可視)

最初のスロットに必要な列を残すことで、この問題の症状を隠しましたが、この特定の DGV がこのように動作する理由がわかりません。同じフォームに、列の位置に関係なく正常に機能する別の DGV があります。

私はここを見ました:最初の列は datagridview に隠れていません、ここでdatagridview id 列は非表示になりません しかし、彼らは私がしたように問題のある列を右に移動しました。

そう。私の質問は。

  1. 可視性パラメーターをオーバーライドできる、私が認識していない他の設定はありますか?

  2. 他の誰かがこれを見たことがありますか?どうやって止めましたか?

4

1 に答える 1

1

私はこれに私自身の拡張メソッドを使用します..そして非常にうまく機能します..また、このメソッドはプログラムでdgvクライアントの高さと幅を設定します..このextメソッドを使用するだけです

1-) フォームに dgv を追加します

2-) ユーザーに表示するものとして、列とヘッダー テキストのリストを作成します。

3-) メソッドを次のように呼び出しますyourDGV.showTheGivenColumns(your params, yourparams, yourparams)

PS:私は名前を英語に変更し、英語で要約を追加しました..ここにコードがあります..

/// <summary>
  /// when this method called, it sets visible = false the columns where not in List of column names
  /// The column names List count and header List count must be the same number
  /// </summary>
  /// <param name="dgvName">DGV which calls this ext method</param>
  /// <param name="Method">the data source load method of the DGV which calls this ext method</param>
  /// <param name="ColumnName">The columnNames List which contains the columns will show.. columnName List's type is List<string></param>
  /// <param name="Header">The list where you can set the dgv's headers as you prefer..it's type is also List<string></param>
  /// <returns></returns>
  public static DataGridView showTheGivenColumns(this DataGridView dgvName, object dataSourceLoadMethod, List<string> columnNameList, List<string> headerList)
            {
                dgvName.DataSource = null;
                dgvName.Columns.Clear();
                dgvName.DataSource = dataSourceLoadMethod;
                int j = columnNameList.Count;
                int m = 0;
                int s = headerList.Count;

                if (j == s)
                {

                    foreach (DataGridViewColumn d in dgvName.Columns)
                    {
                        for (int i = 0; i < j; i++)
                        {
                            if (d.Name == columnNameList[i])
                            {
                                d.HeaderText = headerList[i];
                                d.Visible = true;
                                d.Width = d.GetPreferredWidth(DataGridViewAutoSizeColumnMode.AllCells, false);

                                m += d.Width;
                                break;
                            }
                            else
                            {
                                d.Visible = false;
                            }
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Count of Header and ColumnName Lists are not equal..Please Check.");
                }

///この行の後、dgv に垂直および/または水平スクロールがある場合、メソッドはこのオプションでサイズをチェックして設定します

bool vscroll = (dgvName.DisplayedRowCount(false) < dgvName.Rows.Count);
                bool hscroll = (dgvName.DisplayedColumnCount(false) < columnNameList.Count);
                if (vscroll == true)
                {
                    int vScrollWidth = (dgvName.Controls.OfType<VScrollBar>().First()).Width;
                    dgvName.Width = m + (vScrollWidth + 5);
                }
                if ( vscroll == false)
                {
                    dgvName.Width = m + 5;
                }
                if (hscroll == true)
                {
                    int hscrollWidth = (dgvName.Controls.OfType<HScrollBar>().First()).Height;
                    dgvName.Height = ((dgvName.RowTemplate.Height * dgvName.RowCount) + dgvName.ColumnHeadersHeight) + hscrollWidth;

                }
                if (hscroll == false)
                {
                    dgvName.Height = ((dgvName.RowTemplate.Height * dgvName.RowCount) + dgvName.ColumnHeadersHeight) + 2;
                }

                dgvName.ClearSelection();
                dgvName.ReadOnly = true;
                return dgvName;
             }

あなたはこれらを知りたいかもしれません:

1-) dgv のサイズが列の合計よりも大きいと思われる場合は、フォームで設定してください

d.GetPreferredWidth(DataGridViewAutoSizeColumnMode.AllCells, false);

メソッドの.AllCellsオプションをフォームのニーズに合わせて.. を に設定するfalsetrue、dgv は半分表示されたというフラグが付けられた列を表示します..したがって、これを変更する必要はありません ;)

2-) スクロールバー コード部分のニーズを確認する際、幅または高さに追加される数値は画面の解像度によって異なります。 *968解像度..これらの追加された数値を変更する必要があるかもしれません..

于 2012-06-03T00:37:38.143 に答える