簡體   English   中英

Datagridview還是其他?

[英]Datagridview or something else?

我正在編寫一個winforms應用程序,該應用程序將其數據存儲為純文本文件,並將其作為多列列表呈現給用戶。 我希望用戶能夠對列表進行排序和過濾,還可以對列進行重新排序和隱藏/取消隱藏。

我認為DataGridView會很合適,因為它內置了許多功能,但是我將需要一些DataGridView不能立即使用的單元格類型(例如日期選擇器)。 我知道您可以在DGV中托管控件並閱讀了Technet上的文章,但是它看起來相當復雜,並且對C#,Winforms和OOP不熟悉。 DGV也不是最漂亮的控件,即使我知道如何更改其屬性以使其看起來更好,它也從未到達我真正喜歡的地方。 如果可以的話,外觀並不是決定性的事情,但這是一個“不錯的選擇”。

所以我的問題是:我應該為使DGV做我想做的事情而苦苦掙扎,即使我花了更長的時間並且做起來更令人沮喪,還是我應該滾動自己的自定義控件? 過去,我已經創建了幾個用戶控件,對此我相當滿意。

Brian在上面的評論中是對的。 如果要自定義,則可以使用WPF。 但是,來自WinForms的背景並從WPF重新開始將是一個艱難的學習過程。

從頭開始編寫自己的類似DataGridView的控件,我認為這不是一個可行的選擇。 反映出DataGridView的代碼,您將明白為什么,此組件有成千上萬行代碼。 如果您的意思是您將覆蓋DataGridView類,那么很酷,那是個好主意。 如果它是基於單元格的控件(例如您想要的數據選擇器),則最好改寫/子類化DataGridViewCell而不是...

您可以自定義DataGridView的外觀以使其看起來開箱即用,但不要低估從DataGridViewCell繼承/繼承以制作類似DataPicker類的東西所需的時間。不會那么令人愉快,但當然有可能...

您只需將網格綁定到DataTable類的DataSource並將其過濾,即可獲得所需的過濾。 這將自動過濾顯示的結果。

我會考慮為此使用現有的庫,因為您將在很大程度上重新發明輪子。 當然,大多數控件都是商業性的,而不是免費的。 但一定有一些...

我希望這有幫助。

我已經使用Infragistics幾年了。 他們的WinForms產品非常出色,尤其是他們的贏網格控制聽起來很滿足您的需求。 如果您不想使用他們的網格,甚至可以在DataGridView中使用他們的網格列(他們的網格需要一點時間來習慣)。 他們的控件有些昂貴,但是如果您需要它,它就在那兒。

DataGridView一個很好的替代方法是SourceGrid

https://sourcegrid.codeplex.com/

我嘗試使用用於系統的日歷表單進行測試:

Private Sub dgvTaskLog_CellContentClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvTaskLog.CellContentClick
    Dim frm As New frmCalendar
    frm.ShowDialog()
    If IsDate(frm.outSelectedDate) Then
        dgvTaskLog(e.ColumnIndex, e.RowIndex).Value = frm.outSelectedDate
    End If
End Sub

當用戶單擊單元格時,將打開自定義日歷表單。 您將最需要對要顯示該列的日歷(或其他“控件”)的列進行一些檢查。 不確定如何在單元格之間切換是如何工作的,您可能需要另一個事件才能將其關閉。

自定義窗體承載VB.Net日歷控件並添加本地業務邏輯。 如果返回有效日期,則將其填充到單元格中。 如果網格是綁定的,則需要更新數據源。

無論如何-只是另一個可能的選擇。

就個人而言,我會堅持使用WinForms中的DataGridView。 我不考慮創建日期選擇器單元格類型,而是考慮啟動一個帶有日期選擇器的新窗體,以處理進入單元格的實際時間/日期。 這將為您提供所需的自定義靈活性,同時又不會增加DGV的復雜性。 DGV可以直接使用大多數功能,也可以完全保留原樣,然后,可以根據自己的自定義表單上的日期選擇器的建議,圍繞它構建自定義功能。

祝好運。

擴展DataGridView的功能並不容易,但是可以像在Report Manager之前所做的那樣完成。 您還可以創建自定義字段控件。 也許最簡單的方法是使用gridview創建一個模板字段並使用ajax日歷擴展程序。

<asp:GridView ID="myGridView" runat="server">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:TextBox ID="myTextBox" runat="server" />
                <ajaxToolkit:CalendarExtender ID="calDate" runat="server" TargetControlID="myTextBox" Format="MM/dd/yyyy" SelectedDate='01/01/2016'></ajaxToolkit:CalendarExtender>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM