【问题标题】:Basic DataGridView questions基本 DataGridView 问题
【发布时间】:2012-01-02 22:31:22
【问题描述】:

我有一个带有绑定列表的 datagridvew,其数据源是一个交集表。我有另一个绑定列表,它充当查找并绑定到 DataGridViewComboBoxColumn 类型的列之一。我已经简化了绑定列表,如下所示:

public IList<Flight> flights = new List<Flight>()
{
    new Flight { DepartureID = 1, DestinationID = 1, FlightNumber = "101" },
    new Flight { DepartureID = 2, DestinationID = 2, FlightNumber = "202" },
    new Flight { DepartureID = 3}
};

public IList<Departure> departures = new List<Departure>()
{   
    new Departure {ID = 1, City = "Toronto"},
    new Departure {ID = 2, City = "Chicago"},
    new Departure {ID = 3, City = "New York"}
};

public IList<Destination> destinations = new List<Destination>()
{
    new Destination {ID = 1, City = "London"},
    new Destination {ID = 2, City = "Paris"},
    new Destination {ID = 3, City = "Amsterdam"}
};

我的 datagridview 中有五列:

  • 出发ID:文本框
  • 出发:文本框
  • 目标 ID:文本框
  • 目标:组合框
  • 航班号:文本框

我有三个问题:

1) 出发是只读的。我想显示 ID 和城市。如何添加文本框以自动查找城市值。我想到了 OnCellPainting 事件并进行了查找,但 e.Value 是只读的。有没有类似 Delphi 的 OnCellDrawing 事件。

2) 在 Destinations 的组合框中,一旦用户从组合框中选择了一个值,我如何也更新 Destination ID?

3) 我如何处理我只有 Departure 值的情况(例如,此记录 (new Flight { DepartureID = 3}) 会引发无效值错误,因为组合框没有要查找的值)

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    1) 设置出发城市的最简单方法是使用ComboBox 之类的目的地。将其绑定到目的地列表并将此列标记为ReadOnly。这将处理没有代码的出发。

    2) 你应该用BindingSource 绑定你的DataGridView 和你的List 航班。因为您的ComboBox ValueMember 是您的ID 而您的DisplayMember 是城市名称,它会自动更新您的ID。

    3)如果你想绑定你的数据,模板应该是一样的。您的列表中应该始终有目的地和航班号。如果它们没有价值,请将它们设置为null。您将能够处理 null 值,而无法处理不存在的属性。
    new Flight { DepartureID = 3, DestinationID = null, FlightNumber = null }

    【讨论】:

    • 感谢加布里埃尔的回复。我希望不要使用只读组合框,而只是使用直接文本框。是否有类似于 Delphi DBGrid 的 OnDrawEvent,我可以在那里进行查找?
    • 您总是可以使用 OnDrawEvent 更改控件的查找,但我不熟悉重绘控件。如果你用谷歌搜索,我相信有很多教程。
    • 再次感谢,但我没有看到 DataGridView 的任何 OnDrawEvent。理想情况下,我希望 OnDrawCellEvent 不仅仅是整个网格或列本身。另外,我应该感谢您建议我将 Flight.DestinationID 设为可为空,因为它运行良好。
    • 找到social.msdn.microsoft.com/Forums/zh/winformsdatacontrols/thread/…,它解释说,如果我将组合框 displayStyle 设置为空,则会显示一个类似值的文本框。 Yippee - 我的问题解决了。
    猜你喜欢
    • 1970-01-01
    • 2015-03-07
    • 2012-03-17
    • 2011-05-27
    • 2011-01-13
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多