2016-03-27 8 views
0

私はこのデータグリッドを持っているWindowsフォームを持っています。私は2列後にコンボボックスを追加するためにすべてのデータグリッド行をループしようとしています。DatagridViewRow.Cells.Addメソッドが動作していません

私の目標は、セル[0]の値に基づいて項目を表示するコンボボックスの列を持つことです。

ここに私のコードがあり、データグリッドの行にセルを追加できません。私は間違って何をしていますか?

private void UserAccessForm_Load(object sender, EventArgs e) 
{ 
    dataGridView1.DataSource = LoadData(); 
    AddPermissions(); 

} 

private DataTable LoadData() 
{ 
    ConnectionString = ConfigurationManager.ConnectionStrings["UserProfile"].ToString(); 
    DataSet ds = new DataSet(); 
    using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter()) 
    { 
     // Create the command and set its properties 
     sqlDataAdapter.SelectCommand = new SqlCommand(); 
     sqlDataAdapter.SelectCommand.Connection = new SqlConnection(ConnectionString); 
     sqlDataAdapter.SelectCommand.CommandType = CommandType.Text; 

     // Assign the SQL to the command object 
     sqlDataAdapter.SelectCommand.CommandText = string.Format(Script.sqlGetLocalSystem); 


     sqlDataAdapter.Fill(dt); 
    } 

    return dt; 
} 

public void AddPermissions() 
{ 
    DataTable dPermissions = new DataTable(); 
    long systemId = 0; 


    DataGridViewComboBoxCell comboBoxCell = null; 

    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     ArrayList permissions = new ArrayList(); 
     comboBoxCell = new DataGridViewComboBoxCell(); 
     systemId = Convert.ToInt64(row.Cells[0].Value); 
     dPermissions = LoadPermissions(systemId); 

     foreach (DataRow dataRow in dPermissions.Rows) 
     { 
      permissions.Add(dataRow["UserLevelCategoryName"].ToString()); 
     } 
     comboBoxCell.Items.AddRange(permissions.ToArray()); 

     row.Cells.Add(comboBoxCell); 

    } 
} 

どのようにすればいいですか?

+0

'DataGridViewComboBoxColumn'を' DataGridView'の 'Columns'コレクションに追加する必要があります。 –

+0

ありがとう、うん、私はあなたのポイントを取得します。私はあなたのソリューションを試してみましたが、問題はイベントDataGridView1_EditingControlShowingは、データグリッド内の何かを変更する必要はないので、解雇されていません。データグリッドがロードされると自動的にロードされます。今回はクリア –

+0

最初の問題は、グリッドのセルコレクションにセルを追加することです。 **間違っています!**あなたは私が答えで説明した方法でコンボボックスカラムを追加することができます。次に、コンボボックスに異なるアイテムを入れる方法について新しい質問をします。 –

答えて

0

DataGridViewDataGridViewComboBoxColumnColumnsにコレクションを追加し、列のDataSourceとしてリストを設定する必要がありますあなたはrow.Youの細胞コレクションにセルを追加することはできません。また、コンボで表示するデータソースのフィールドにDisplayMemberを設定し、コンボから項目を選択するときにその値を選択値として使用するようにデータソースのフィールドにValueMemberを設定します。

グリッドコントロールもデータソースにバインドされていて、この列を作成してグリッドのデータソースからフィールドの値を表示する場合は、希望するグリッドデータソースのフィールドにDataPropertyNameを設定しますこの列をバインドします。あなたが別のセルに基づいて、各列のコンボボックスで別のアイテムを表示したい場合は

DataTable permissions = LoadPermissions(); //Load all permissions 
var column1 = new DataGridViewComboBoxColumn(); 
column1.Name = "column1"; 
column1.DataSource = permissions; 

//a column from Permissions table to use its value when the user select from combo box 
column1.ValueMember = "Id"; 

//a column from Permissions table to show its value in combo box 
column1.DisplayMember = "Name"; 

//a column from datasourec table of your grid which you want to bind column to 
column1.DataPropertyName = "PermissionId"; 

//Add column to grid 
this.categoryDataGridView.Columns.Add(column1); 

その後、あなたはEditingControlShowingイベントを処理し、編集コントロールを取得し、他のセルの値に基づいて制御のDataSourceを設定する必要があります。

関連する問題