2015-05-10 25 views
5

Tôi có đơn đăng ký WinformsDataGridView. DataGridView không bị ràng buộc vào nguồn dữ liệu. Tôi đang đọc một tập tin văn bản và theo từng dòng trong tập tin, tôi đang đặt các giá trị của mỗi hàng vào datagrid.Lấy DatagridviewComboBoxCell's SelectedIndex

Tôi có một cột trong lưới của mình là ComboBoxColumn. Nó có một bộ sưu tập các vật phẩm trong đó.

Mục tiêu của tôi là lưu vào tệp chỉ mục của mục được hiển thị trong ô. Tuy nhiên, có vẻ như là ComboBoxCell không có thuộc tính SelectedIndex như ComboBox. Điều quan trọng cần lưu ý là tôi cần phải biết chỉ mục của mục được hiển thị chỉ khi người dùng nhấn tùy chọn "Lưu", Vì vậy, tôi không tin rằng sự kiện editControlShowing là cách của tôi để đi.

Trả lời

3

Vâng, bạn đã nhận nó gần như ngay: Để tìm ra chọn chỉ số bạn làm cần phải mã hóa các sự kiện EditingControlShowing, chỉ cần đảm bảo để giữ một tham chiếu đến ComboBox được sử dụng trong quá trình chỉnh sửa:

// hook up the event somwhere: 
    dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing; 

// keep a reference to the editing comtrol: 
ComboBox combo = null; 

// fill the reference, once it is valid: 
void dataGridView1_EditingControlShowing(object sender, 
              DataGridViewEditingControlShowingEventArgs e) 
{ 
    combo = e.Control as ComboBox; 
} 

Bây giờ bạn có thể sử dụng nó:

private void Save_Click(object sender, EventArgs e) 
{ 
     int index = -1; 
     if (combo != null) index = combo.SelectedIndex; 
     // now do what you want.. 
} 

Note rằng đây chỉ là một nốt trắng ví dụ. Nếu người dùng của bạn sẽ chỉnh sửa một số cột và hàng trước khi họ nhấn 'Lưu' Buton, bạn sẽ cần lưu trữ ComboBoxes hoặc ít tốn kém hơn SelectedIndex, có thể trong sự kiện CellEndEdit trên cơ sở mỗi ô. Tag là nơi lưu trữ rõ ràng Cells':

void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    if (combo != null) 
     dataGridView1[e.ColumnIndex, e.RowIndex].Tag = combo.SelectedIndex; 
} 

Trong phiên bản này bạn rõ ràng sẽ lấy chỉ số hình thành Tag, không phải từ kết hợp ..

Tất nhiên bạn cũng có thể tìm thấy một Item từ Value như này:

DataGridViewComboBoxCell dcc = 
         (DataGridViewComboBoxCell)dataGridView1[yourColumn, yourRow]; 
int index = dcc.Items.IndexOf(dcc.Value); 

Nhưng điều đó chỉ đơn giản là sẽ nhận được các chỉ số phù hợp đầu tiên, không phải là người mà đã thực sự lựa chọn ..

+2

Thuộc tính Thẻ được kết hợp với những sự kiện đó đã cho tôi giải pháp tôi cần. Cảm ơn rất nhiều – subirshan

Các vấn đề liên quan