2017-10-27 10 views
0

私は自分の問題について助けを求めます。私はすべての列がリスト<のDataPropertyNameで設定されているDGVを持っています。私がそれを読み込むと、DGVはシフトのIDでいっぱいです。それは完全に動作しますが、これを(intを含む)セルをComboBoxに変更したいと考えています。ここでdisplaymemberはシフト名になり、このシフトIDを評価します。DataGridView内のvaluememberとdisplaymemberを使用したC#ComboBox

誰にも解決策がありますか、それとも私はそれをリメイクする必要がありますか?

が、これは私がDataGridViewComboBoxColumnコントロールを追加するために、私のアプリケーションの一つでヘルパーメソッドを使用し

public void FillWithData(int month, int year, int centerID) 
    { 
     IScheduleRecord record = new ScheduleRecordDAO(); 

     List<Shift> shifts = new ShiftDAO().GetShiftsByCenterId(center); 

     dataGridView1.Columns[1].DataPropertyName = "Day1"; 
     dataGridView1.Columns[2].DataPropertyName = "Day2"; 
     dataGridView1.Columns[3].DataPropertyName = "Day3"; 
     dataGridView1.Columns[4].DataPropertyName = "Day4"; 
     dataGridView1.Columns[5].DataPropertyName = "Day5"; 
     dataGridView1.Columns[6].DataPropertyName = "Day6"; 
     dataGridView1.Columns[7].DataPropertyName = "Day7"; 
     dataGridView1.Columns[8].DataPropertyName = "Day8"; 
     dataGridView1.Columns[9].DataPropertyName = "Day9"; 
     dataGridView1.Columns[10].DataPropertyName = "Day10"; 
     dataGridView1.Columns[11].DataPropertyName = "Day11"; 
     dataGridView1.Columns[12].DataPropertyName = "Day12"; 
     dataGridView1.Columns[13].DataPropertyName = "Day13"; 
     dataGridView1.Columns[14].DataPropertyName = "Day14"; 
     dataGridView1.Columns[15].DataPropertyName = "Day15"; 
     dataGridView1.Columns[16].DataPropertyName = "Day16"; 
     dataGridView1.Columns[17].DataPropertyName = "Day17"; 
     dataGridView1.Columns[18].DataPropertyName = "Day18"; 
     dataGridView1.Columns[19].DataPropertyName = "Day19"; 
     dataGridView1.Columns[20].DataPropertyName = "Day20"; 
     dataGridView1.Columns[21].DataPropertyName = "Day21"; 
     dataGridView1.Columns[22].DataPropertyName = "Day22"; 
     dataGridView1.Columns[23].DataPropertyName = "Day23"; 
     dataGridView1.Columns[24].DataPropertyName = "Day24"; 
     dataGridView1.Columns[25].DataPropertyName = "Day25"; 
     dataGridView1.Columns[26].DataPropertyName = "Day26"; 
     dataGridView1.Columns[27].DataPropertyName = "Day27"; 
     dataGridView1.Columns[28].DataPropertyName = "Day28"; 

     if (CountColumns(month, year) == 30) { 
      dataGridView1.Columns[29].DataPropertyName = "Day29"; 
      dataGridView1.Columns[30].DataPropertyName = "Day30"; 
     } 
     if (CountColumns(month, year) == 31) { 
      dataGridView1.Columns[29].DataPropertyName = "Day29"; 
      dataGridView1.Columns[30].DataPropertyName = "Day30"; 
      dataGridView1.Columns[31].DataPropertyName = "Day31"; 
     } 

     dataGridView1.DataSource = record.GetScheduleRecordsByMonthYearCenter(month, year, center); 
     this.dataGridView1.RowsDefaultCellStyle.BackColor = Color.Beige; 
     this.dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = 
      Color.LightGray; 
     this.dataGridView1.Columns["Year"].Visible = false; 
     this.dataGridView1.Columns["Month"].Visible = false; 
     this.dataGridView1.Columns["CenterID"].Visible = false; 
     this.dataGridView1.Columns["Id"].Visible = false; 
     this.dataGridView1.Columns["EmployeeID"].Visible = false; 
     if (CountColumns(month, year) == 28) 
     { 
      this.dataGridView1.Columns["Day29"].Visible = false; 
      this.dataGridView1.Columns["Day30"].Visible = false; 
      this.dataGridView1.Columns["Day31"].Visible = false; 
     } 
     if (CountColumns(month, year) == 30) 
     { 
      this.dataGridView1.Columns["Day31"].Visible = false; 
     } 
+0

書籍、ツール、ソフトウェアライブラリ、チュートリアル、またはその他のオフサイトリソースを推奨するかどうかを質問するには、スタックオーバーフローに関するトピックがあります。彼らはオピニオンレスポンスやスパムを集める傾向があるためです。代わりに、問題を説明し、それを解決するためにこれまでに何が行われているかを記述します。 – Reniuz

答えて

0

を持っているコードです

非常

、ありがとうございました。うまくいけば、それはあなたがする必要がある場所を得るのを助けることができます:

private void AddBoundDataGridViewComboBoxColumn(
     DataGridView dgv, 
     string dataPropertyName, 
     string displayMember, 
     string valueMember, 
     object dataSource, 
     string headerText, 
     string toolTipText = "") 
    { 
     DataGridViewComboBoxColumn comboBoxColumn = new DataGridViewComboBoxColumn(); 
     int columnIndex; 
     if (ts.TraceVerbose) Trace.WriteLine("entering"); 
     try 
     { 
      #region Try 
      comboBoxColumn.DataPropertyName = dataPropertyName; 
      comboBoxColumn.Name = dataPropertyName; 
      comboBoxColumn.DisplayMember = displayMember; 
      comboBoxColumn.ValueMember = valueMember; 
      comboBoxColumn.DataSource = dataSource; 
      columnIndex = dgv.Columns.Add(comboBoxColumn); 
      dgv.Columns[columnIndex].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
      dgv.Columns[columnIndex].HeaderText = headerText; 
      dgv.Columns[columnIndex].ToolTipText = toolTipText; 
      if (ts.TraceVerbose) Trace.WriteLine("Column added to " + dgv.Name + ": " + dataPropertyName + " (Tool tip: " + toolTipText + ")"); 
      #endregion Try 
     } 
     catch (Exception) 
     { 
      throw; 
     } 
     finally 
     { 
      if (ts.TraceVerbose) Trace.WriteLine("exiting"); 
     } 
    } 

私は、セルのコンテンツのクリックのための一般的なイベントハンドラを使用します。

 private void dgvSCXTableView_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     var senderGrid = (DataGridView)sender; 

     if (senderGrid.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && e.RowIndex >= 0) 
     { 
     } 
    } 

は、それはあなたのお役に立てば幸いです。

List<Shift> shifts = new ShiftDAO().GetShiftsByCenterId(center); 
関連する問題