0

这是我的构造函数,

new VisConfig(
string.Empty,
string.Empty,
new List<SensorConfig>()
    {

        new SensorConfig(
        string.Empty, //DGV COl0
        string.Empty, //DGV COl1
        new List<CoveredTrafficLane>()
            {
                new CoveredLane(string.Empty) //DGV COl 2,3,4,5
            },
                new RseDevicePosition(
                new ValueWithUnit<int>(0, "mm"), //DGV COl6
                new ValueWithUnit<int>(0, "mm"), //DGV COl7
                new ValueWithUnit<int>(0, "mm"), //DGV COl8
                new ValueWithUnit<int>(0, "tenthOfDegree"), //DGV COl9
                new ValueWithUnit<int>(0, "tenthOfDegree"), //DGV COl10
                new ValueWithUnit<int>(0, "tenthOfDegree")), //DGV COl11
                0, //DGV COl12
                0) //DGV COl13
    },

我正在尝试将数据从 DGV(winform) 获取到此构造函数。

请帮助我,我怎样才能获得数据网格值并将其填充到构造函数中。

4

2 回答 2

1

好吧,当我开始编码时。我意识到这并不理想。

您需要将 DGV 的选择属性设置为整行。或者,如果这不符合您的规范,您可能必须调整它在第二个循环中循环的集合。

    private void btnMyButton_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        foreach (DataGridViewColumn col in dgvMyGrid.Columns)
            dt.Columns.Add(col.Name.ToString());

        DataRow dr = dt.NewRow();
        foreach (DataGridViewCell cell in dgvMyGrid.SelectedRows[0].Cells)
            dr[cell.OwningColumn.Name] = cell.Value.ToString();               

    }

完成后,“dr”变量是一个 dataRow,表示来自 dgv 的选择。您可以将构造函数设置为采用 DataRow 类型的参数。

然后,您应该能够使用 DataRow.Cells[] 类似于您发布的方式,您知道该怎么做,以获取您的值。

这里没有暗示担保,它在我的大脑中工作得更好。祝你好运。

于 2012-10-26T12:30:04.260 回答
1

如果我理解你的问题-> 你的 DtuSensorConfig 构造函数从 DataGridView 的一行获取数据。因此,在 VisConfig 构造函数之外创建 List ,然后将这个列表传递到那里。

List<DtuSensorConfig> dSensorConf = new List<DtuSensorConfig>()
foreach (DataGridViewRow dr in dataGridView3.Rows)
{
    //Create a CoveredTrafficLane list 
    List<CoveredTrafficLane> covTrafLane = new List<CoveredTrafficLane>();
    //DGV COl 2,3,4,5
    covTrafLane.Add(New CoveredTrafficLane(dr.Cells["DGVCOL2"].Value.ToString()));
    covTrafLane.Add(New CoveredTrafficLane(dr.Cells["DGVCOL3"].Value.ToString()));
    covTrafLane.Add(New CoveredTrafficLane(dr.Cells["DGVCOL4"].Value.ToString()));
    covTrafLane.Add(New CoveredTrafficLane(dr.Cells["DGVCOL5"].Value.ToString()));

    //Create RseDevicePosition
    RseDevicePosition devPos;
    int ctx = 0;
    Int32.TryParse(dr.Cells["dtux"].Value.ToString(), out ctx);
    int cty = 0;
    Int32.TryParse(dr.Cells["dtuy"].Value.ToString(), out cty);
    int ctz = 0;
    Int32.TryParse(dr.Cells["dtuz"].Value.ToString(), out ctz);
    int dtuazu = 0;
    Int32.TryParse(dr.Cells["dtuazim"].Value.ToString(), out dtuazu);
    int dtuele = 0;
    Int32.TryParse(dr.Cells["dtuele"].Value.ToString(), out dtuele);
    int dtuti = 0;
    Int32.TryParse(dr.Cells["dtutilt"].Value.ToString(), out dtuti);

    devPos = new RseDevicePosition(
    new ValueWithUnit<int>(ctx, "mm"),
    new ValueWithUnit<int>(cty, "mm"),
    new ValueWithUnit<int>(ctz, "mm"),
    new ValueWithUnit<int>(dtuazu, "tenthOfDegree"),
    new ValueWithUnit<int>(dtuele, "tenthOfDegree"),
    new ValueWithUnit<int>(dtuti, "tenthOfDegree"));

    //here create a DtuSensorConfig
    dSensorConf.Add(
        new DtuSensorConfig(dr.Cells["DGVCOL0"].Value.Tostring(), //DGV COl0
                            dr.Cells["DGVCOL1"].Value.Tostring(), //DGV COl1       
                            covTrafLane,
                            devPos));
}
VisConfig vConf = new VisConfig(string.Empty,
                                string.Empty,
                                dSensorConf); // 
于 2012-10-26T13:01:24.357 回答