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)からこのコンストラクターにデータを取得しようとしています。

Plaseは私を助けてくれます、どうすればdatagridvalueを取得して、コンストラクターに入力できますか。

4

2 に答える 2

1

さて、私がそれをコーディングし始めたとき。私はこれが理想的ではないことを理解しています。

DGVのselectionプロパティを行全体に設定する必要があります。または、それが仕様に合わない場合は、2番目のループでループするコレクションを微調整する必要があります。

    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」変数はdgvからの選択を表すdataRowになります。DataRow型の引数を取るようにコンストラクターを設定できます。

そうすれば、投稿した方法と同じようにDataRow.Cells []を使用して、値を取得する方法を知っているはずです。

ここでは保証はありません。私の脳ではうまく機能していました。幸運を。

于 2012-10-26T12:30:04.260 に答える
1

私があなたの質問を正しく理解している場合->DtuSensorConfigのコンストラクターは、DataGridViewの1つの行からデータを取得します。したがって、VisConfigコンストラクターの外部でリストを作成し、そこにこのリストを渡します。

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 に答える