2014-02-11 4 views
-1

Я создал DataGrid в C#. Он считывает и отображает данные. Но у меня проблема с двойным щелчком. Если я дважды щелкнуть по тексту, это будет работать и открывается, но если я дважды щелкнуть внутри той же строки, где нет текста, это не сработает. Может ли кто-нибудь помочь мне решить эту проблему. Вот код и скриншот из программы.Двойной щелчок внутри DataRow в C#

Data Grid

public void FillListBox(DataTable table) 
    { 
     CgmTable = new DataView(table, "", "Title ASC", DataViewRowState.CurrentRows).ToTable(); 
     dgCgm.DataSource = CgmTable;   
     dgCgm.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; 
     dgCgm.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; 
    } 

    private void txtFilter_TextChanged(object sender, EventArgs e) 
    { 
     TextBox tb = sender as TextBox; 
     if (txtFilter.Text.Length == 0 && txtTitle.Text.Length == 0) 
      dgCgm.DataSource = CgmTable; 
     else 
     { 
      String sql = tb.Name == "txtTitle" ? "Title LIKE '{0}*'" : "FileName LIKE '{0}*'"; 
      DataTable table = new DataView(CgmTable, String.Format(sql, tb.Text), "Title asc", DataViewRowState.CurrentRows) 
       .ToTable(); 
      dgCgm.DataSource = table;    
     } 
    } 

    private void dgCgm_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e) 
    { 
     int recNo = Convert.ToInt32(dgCgm.Rows[e.RowIndex].Cells["RecNo"].Value); 
     int fileRec = Convert.ToInt32(dgCgm.Rows[e.RowIndex].Cells["FileRec"].Value); 
     string fileName = dgCgm.Rows[e.RowIndex].Cells["FileName"].Value.ToString(); 
     string projectName = dgCgm.Rows[e.RowIndex].Cells["Project"].Value.ToString(); 
     EventHandler<JumpToEventArgs> handler = LaunchCgm; 
     if (handler != null) 
     { 
      JumpToEventArgs ev = new JumpToEventArgs(recNo, fileRec, fileName, projectName); 
      handler(this, ev); 
     } 
     this.Close(); 
    }  
} 

public class JumpToEventArgs : EventArgs 
{ 
    private int recNo, fileRec; 
    private string fileName, projectName;   

    public JumpToEventArgs(int recNo, int fileRec, 
     string fileName, string projectName) 
    { 
     this.recNo = recNo; 
     this.fileRec = fileRec; 
     this.fileName = fileName; 
     this.projectName = projectName; 
    } 

ответ

3

Вы должны использовать CellDoubleClick событие (msdn).

Различия между CellDoubleClick и CellContentDoubleClick:

DataGridView.CellDoubleClick Событие (msdn)

происходит, когда пользователь дважды нажимает в любом месте в ячейке.

DataGridView.CellContentDoubleClick Event (msdn)

Происходит, когда пользователь дважды щелкает содержимое клетки.

Вы должны добавить обработчик события к событию CellDoubleClick и удалить обработчик события из CellContentDoubleClick события:

enter image description here

+0

_DO Мне нужно только изменить cellContentDoubleClick к CellDoubleClick? или что-нибудь еще нужно изменить внутри метода? Причина, просто перейдя из ContentDoubleClick в DoubleClick, не решила проблему @kmatyaszek_ –

+0

@ user603948 снова проверить мой ответ :) – kmatyaszek

1

Content часть мероприятия является вопрос здесь. Попробуйте использовать версию без содержания:

private void dgCgm_CellDoubleClick(object sender, DataGridViewCellEventArgs e) 
1

Ваша проблема: вы используете неправильный обработчик событий. Обработчик события CellContentDoubleClick запускается только при нажатии кнопки СОДЕРЖАНИЕ (в вашем случае, текста) ячейки. Изменение обработчика событий на CellDoubleClick приведет к тому, что событие будет срабатывать при каждом щелчке по ячейке.

Затем в окне свойств вам необходимо будет изменить CellDoubleClick datagridview на этот метод dgCgm_CellContentDoubleClick. Или перейти к коду конструктора и удалить

dgCgm.CellContentDoubleClick += new DataGridViewCellEventHandler(dgCgm_CellContentDoubleClick); 

И добавить:

dgCgm.CellDoubleClick += new DataGridViewCellEventHandler(dgCgm_CellContentDoubleClick);