【发布时间】:2018-06-16 17:08:12
【问题描述】:
我正在尝试更改 Datagridview 中的 Combobox 值。进入 datagriview 的数据来自放置在数据集中的 XML 文件。所以基本上我想把数据集放到DataGridView中。第二列应该是一个组合框。我在论坛上读到我应该为 Combobox 制作一本字典,所以我从它开始,但现在如何继续我不太确定。这是我已经准备好的一些代码。这是我在专门课程中开设的两个课程。现在在我的
public class ClassMAVLinkCmd
{
Dictionary<int, MVLCmdMessage> MAVLnkCommand = new Dictionary<int, MVLCmdMessage>()
{
{16, new MVLCmdMessage {UAVCANMode = "UAV_CMD", MAVLinkCommand = "MAV_CMD_NAV_WAYPOINT", MAVLinkMsgId = 16} } ,
{17, new MVLCmdMessage {UAVCANMode = "UAV_CMD", MAVLinkCommand = "MAV_CMD_NAV_LOITER_UNLIM", MAVLinkMsgId = 17} },
{18, new MVLCmdMessage {UAVCANMode = "UAV_CMD", MAVLinkCommand = "MAV_CMD_NAV_LOITER_TURNS", MAVLinkMsgId = 18} },
};
}
public class MVLCmdMessage
{
public string UAVCANMode { get; set; }
public string MAVLinkCommand { get; set; }
public int MAVLinkMsgId { get; set; }
}
现在,当我按下按钮读取文件并将其加载到 DataGridview 中时,我有这个:
private void btnLoad_Click(object sender, EventArgs e)
{
DataSet dsRoute = new DataSet();
//Open the file dialog and select a XML file
if (myOpen.ShowDialog() == DialogResult.OK)
{
try
{
if ((myStream = myOpen.OpenFile()) != null)
{
using (myStream)
dsRoute.ReadXml(myStream);
strFilename = myOpen.SafeFileName.ToString();
StatusRouteName.Text = strFilename;
int i = 0;
int length = dsRoute.Tables.Count;
for (i = 0; i < length; i++)
{
DataWayPoints.Rows.Add();
int row = WayPointList.Count;
DataWayPoints["Waypoint", i].Value = Convert.ToString(i + 1);
//DataWayPoints["MAVLnkCmd", i].Value = dsRoute.Tables[i].Rows[0]["MAVLnkCmd"].ToString();
//Need to investigate how to set a cmbBox in a DGV!!!!!!!!!!!!!!!!!!!!!!
DataWayPoints["P1", i].Value = dsRoute.Tables[i].Rows[0]["P1"].ToString();
DataWayPoints["P2", i].Value = dsRoute.Tables[i].Rows[0]["P2"].ToString();
DataWayPoints["P3", i].Value = dsRoute.Tables[i].Rows[0]["P3"].ToString();
DataWayPoints["P4", i].Value = dsRoute.Tables[i].Rows[0]["P4"].ToString();
DataWayPoints["Latitude", i].Value = dsRoute.Tables[i].Rows[0]["Latitude"].ToString();
DataWayPoints["Longitude", i].Value = dsRoute.Tables[i].Rows[0]["Longitude"].ToString();
DataWayPoints["Altitude", i].Value = dsRoute.Tables[i].Rows[0]["Altitude"].ToString();
DataWayPoints["DistanceToNextWpt", i].Value = dsRoute.Tables[i].Rows[0]["DistanceToNextWpt"].ToString();
DataWayPoints["Velocity", i].Value = dsRoute.Tables[i].Rows[0]["Velocity"].ToString();
}
lblWayPointTotal.Text = "Waypoint total: " + length.ToString();
CalcWptDistances();
}
}
catch (Exception )
{
MessageBox.Show("Error could not open the selected file");
}
UpdateRouteList();
}
}
谁能解释一下下一步是什么,非常感谢提前
【问题讨论】:
-
如果您稍后将使用键来查找值,那么将数据存储在字典中是有意义的。不确定您的数据是什么;但您甚至无法访问 MAVLnkCommand,因为它是一个私有字段。你有没有看到this post?在这里,州名是 List
持有该州城市的关键,然后将其加载到组合单元的项目中.. -
抱歉,我旅行的回复迟了,我希望 MAVLnkCommand 类可以通过整个程序访问,所以我应该将其设为公开静态。我看过你提到的帖子,但我不完全理解。我基本上尝试做同样的事情,只是对我来说,我只需要组合框中可用的“MAV_CMD_NAV_WAYPOINT”等命令。我只展示了 3 个命令,但有很多只是为了节省我在示例中编写的不必要的代码,只有 3 个。这些命令应该出现在第 2 列中。
-
不需要显示更多数据,但有助于更好地理解数据结构。你真的让它分布在许多表上并想从每个表中创建一行吗? (正常的方法是有一个表格,其中的行和字段填充 dgv 及其行和单元格..)
-
我的表是Dataset dsRoute,它是一个XML文件,所以我只有一个表。该表的第二列应该是这个 Combobox。因为在表格中我希望能够调整命令和值。我在 DGV 组合的属性窗口中设置了这些命令。但是当我加载文件时出现错误。保存有效,但加载 XML 文件时出现错误。这个错误是因为我在调试过程中发现的组合框。因此,我在论坛上搜索并找到了与您提到的相同的主题并认为让我们尝试一下。
-
顺便说一句,有 131 个不同的命令,例如 MAV_CMD_NAV_WAYPOINT,我想用一个组合来选择所有命令。但是在第 1 行中会有一个与第 2 行和第 2 行等不同的命令。我想用它来为我的无人机制定飞行计划。
标签: c# datagridview datagridcomboboxcolumn