5

DataGridViewは2つの列を含むものを持っていComboBoxます。2番目ComboBoxは、最初から選択した値に応じてデータで埋められますComboBox

SelectedIndexChanged最初のイベントの処理方法ComboBox

4

3 に答える 3

14

EditingControlShowingイベントを使用するとcb_SelectedIndexChanged、ユーザーがコンボボックスを選択したが選択を変更しなかった場合でも、イベントが数回発生します。

これは私のために働きます:

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == comboboxColumn.Index && e.RowIndex >= 0) //check if combobox column
    {
        object selectedValue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
    }
}

//changes must be committed as soon as the user changes the drop down box
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (dataGridView1.IsCurrentCellDirty)
    {
        dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}
于 2013-01-24T14:12:49.597 に答える
11

DataGridViewの質問に関する優れたリソースは、次の場所にあります。

http://www.windowsclient.net/Samples/Go%20To%20Market/DataGridView/DataGridView%20FAQ.doc

そこから、選択した変更イベントを処理する方法:

SelectedIndexChangedイベントを処理するにはどうすればよいですか?

ユーザーがComboBox編集コントロールでアイテムをいつ選択したかを知ることが役立つ場合があります。フォームにComboBoxを使用すると、通常、SelectedIndexChangedイベントを処理します。DataGridViewComboBoxでは、DataGridView.EditingControlShowingイベントを使用して同じことを行うことができます。次のコード例は、これを行う方法を示しています。このサンプルは、複数のSelectedIndexChangedイベントが発生しないようにする方法も示していることに注意してください。

private void dataGridView1_EditingControlShowing(object sender, 
    DataGridViewEditingControlShowingEventArgs e)
{
    ComboBox cb = e.Control as ComboBox;
    if (cb != null)
    {
        // first remove event handler to keep from attaching multiple:
        cb.SelectedIndexChanged -= new
        EventHandler(cb_SelectedIndexChanged);

        // now attach the event handler
        cb.SelectedIndexChanged += new 
        EventHandler(cb_SelectedIndexChanged);
    }
}

void cb_SelectedIndexChanged(object sender, EventArgs e)
{
    MessageBox.Show("Selected index changed");
}
于 2012-08-14T14:54:14.910 に答える
0

次のように、2番目のドロップダウンリストを[更新]パネルに配置します

<asp:UpdatePanel ID="UpdatePanel1" runat="server" RenderMode="Inline">
                 <ContentTemplate>
                 <asp:DropDownList ID="ddl2" runat="server" >                  
                </ContentTemplate>
                <Triggers>
                <asp:AsyncPostBackTrigger ControlID="ddl1" EventName="SelectedIndexChanged" />
                </Triggers>
                </asp:UpdatePanel>

このように、最初のドロップダウンリストにAutoPostBack="true"プロパティを設定します。

<asp:DropDownList ID="ddl1" runat="server" AutoPostBack="true"  
                        OnSelectedIndexChanged="ddl1_SelectedIndexChanged">
于 2012-08-14T10:40:07.387 に答える