2009-06-03 18 views
10

Mam oprawiony DataGridView, który zawiera dużą ilość danych. Problem polega na tym, że niektóre komórki muszą być Odczytane, a także kiedy użytkownik nawiguje z TAB lub ENTER między komórkami, komórki ReadOnly powinny być ominięte. Jaki jest najlepszy sposób tworzenia określonych komórek Czytelnie wystarczy po załadowaniu?Komórki DataGridView tylko do odczytu

Pętla po komórkach po ustawieniu DataSource nie jest dobrym pomysłem, biorąc pod uwagę, że siatka zawiera dużą ilość danych. Co więcej, sprawienie, że komórka ReadOnly w CellEnter nie działa, ponieważ podczas nawigacji za pomocą klawisza TAB muszę już wiedzieć, czy następna komórka jest ReadOnly czy nie.

Odpowiedz

17

spróbować zrobić kolumnę zamiast pojedynczych komórek readonly przed wiązania danych:

this.dgrid.Columns["colName"].ReadOnly = true; 

Jeśli trzeba zrobić dla poszczególnych komórek w kolumnie, a następnie trzeba będzie pętli i ustawić je tak:

this.dgridvwMain.Rows[index].Cells["colName"].ReadOnly = true; 
+0

nie mogę, niektóre z komórek w kolumnie nie może być tylko do odczytu i inni. To zależy od niektórych flag. –

+0

Poszczególne kolumny należy zapętlić i ustawić na true. To będzie czasochłonne, ale nie sądzę, że istnieje jakakolwiek inna alternatywa. –

+2

.ReadOnly = true - tak, ale należy to zrobić po zakończeniu powiązania danych. Na przykład. w module obsługi zdarzeń DataGridView.DataBindingComplete. – Boogier

0

Gdy kolumna jest tylko do odczytu (patrz odpowiedź Rashmi za) można obsłużyć to zdarzenie ...

private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == (char)Keys.Tab) 
    { 
     Boolean readOnly = (sender as DataGridView).SelectedCells[0].ReadOnly; 

     return; 
    } 

} 

Który otrzyma właściwość read only next cell.

Dzięki

+0

Nie mogę wstawić kolumny Tylko do odczytu, ponieważ niektóre komórki w tej samej kolumnie mogą być tylko przeczytane, a inne nie. To zależy od niektórych flag. –

+0

Nie jestem w 100% pewna, że ​​kolumna "Czytam" będzie miała wpływ na kod, który napisałem. Być może warto spróbować ... –

1

Nie próbowałem tego.

Ale można ustawić właściwość readonly komórki na wartość true (jak na Rashmi), w zdarzeniu RowEnter?

Przypuszczam, że zdarzenie RowEnter powinno wystrzelić, gdy przechodzisz z jednego wiersza do drugiego (lub powinno się, gdy zmieniasz z komórki A1 na B3).

Czy to w ogóle pomaga?

-2

Jest to bardzo miłe próbka tutaj:
http://blogs.msdn.com/netcfteam/archive/2006/04/25/583542.aspx

Wystarczy zastąpić Paint(), Użyłem tego na Compact Framework zmienić backcolor zależności od zawartości komórki więc na tym samym pamiętać, ty powinnaś t mieć żadnego problemu, aby ustawić je tylko do odczytu.

+2

-1 Niewłaściwy sposób na rozwiązanie problemu. – siride

+0

Odpowiedzi dotyczące tylko linków są sprzeczne z wytycznymi dotyczącymi publikowania. Kompletną odpowiedzią byłoby, gdyby użytkownik nie musiał przechodzić do innej strony, aby rozwiązać problem. – orgtigger

-1

Czy nie można użyć kolumny szablonu zamiast powiązanej kolumny, a następnie mieć warunek do odczytu tylko pola?

Następnie można przedstawić etykietę tylko do odczytu i pole tekstowe do edycji. Etykiety nie będą kolidować z indeksem kart.

<asp:TemplateColumn> 
    <ItemTemplate> 
<% 
    if (<%# Eval("ReadOnlyFlag") %>) 
    { 
%> 
    <asp:Label Text="<%# Eval("BoundColumn") %>" /> 
<% 
    } 
    else 
    { 
%> 
    <asp:Textbox Text="<%# Eval("BoundColumn") %>" /> 
<% 
    } 
%> 
    </ItemTemplate> 
</asp:TemplateColumn> 
+2

Program ASP.NET nie ma "DataGridView" ... Program OP wymaga odpowiedzi na WinForm. –

4

Możesz użyć zdarzenia CellBeginEdit i ustawić e.Cancel = True, gdy potrzebujesz wyłączyć komórkę.

Private Sub DataGridView_CellBeginEdit(sender As System.Object, e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles DataGridViewMsg.CellBeginEdit 
    If DataGridViewMsg.Rows(e.RowIndex).Cells("disable").Value = "Y" Then 
     e.Cancel = True 
    End If 
End Sub 
1
this.dataGridViewEmpList.EditMode = DataGridViewEditMode.EditProgrammatically; 
Powiązane problemy