索引不会列表

时间:2013-06-17 20:37:59

标签: c# list datagridview indexing

我还在学习编程

我正在尝试将客户数据列入清单。所以我可以从索引中获取值,但它只能获得第一个客户。索引不会增加,我仍然感到困惑,我已经移动了变量增量索引将无法正常工作,也许我的逻辑不正确。这是代码,告诉我哪里不对.. ??谢谢你的帮助和解释

public void getJamVSpot()
{
    var listJamAwal = new List<String>();
    var listJamAkhir = new List<String>();
    var listNota = new List<int>();

    DateTime tglSewa = dtp_tglSewa.Value.Date;
    int r = 0;
    String ja = String.Empty;
    String jb = String.Empty;
    int n = 0;
    int indexUp = 0;

    if (dtp_tglSewa.Value.Date == jl.getTglJadwalVspot(tglSewa, lap) && rdb_Lapangan_VSpot.Checked == true || rdb_rumputSintetis.Checked == true)
    {

        IEnumerator<String> jAwal = jl.getJamAwalbyDate(tglSewa, lap);
        while (jAwal.MoveNext())
        {
            listJamAwal.Add(jAwal.Current);

        }
        IEnumerator<String> jAkhir = jl.getJamAkhirbyDate(tglSewa, lap);
        while (jAkhir.MoveNext())
        {
            listJamAkhir.Add(jAkhir.Current);

        }
        IEnumerator<int> nota = jl.getNota(tglSewa, lap);
        while (nota.MoveNext())
        {
            listNota.Add(nota.Current);

        }

        ja = listJamAwal[indexUp];
        jb = listJamAkhir[indexUp];
        n = listNota[indexUp];

        int count = jl.countNota(n);
        String penyewa = jl.getNamaPenyewa(n);
        String no_kontak = jl.getNomorKontak(n);
        String status = jl.getStatusSewa(n);

        for (int i = 1; i <= count; i++)
        {
            foreach (DataGridViewRow row in dgv_Jadwal_Sewa.Rows)
                if (row.Cells[0].Value.ToString().Equals(ja))
                {
                    r = row.Index;

                    row.Cells[2].Value = penyewa;
                    row.Cells[3].Value = no_kontak;
                    row.Cells[4].Value = status;

                    if (ja != jb)
                    {
                        ja = jl.getJamAkhirbyJamAwal(ja);
                        row.Cells[2].Value = penyewa;
                        row.Cells[3].Value = no_kontak;
                        row.Cells[4].Value = status;
                        //dgv_Jadwal_Sewa.Rows[r].Selected = true;

                    }
                    break;
                }
        }

    } indexUp++;
}

enter image description here

3 个答案:

答案 0 :(得分:1)

当您递增indexUp变量时,您不再使用它了。

在您的代码中,您只是恢复第一个项目(0),使用此值(在循环中)执行一些操作并退出。

例如,你可以用这个循环包装你的东西:

    for (int indexUp = 0; indexUp < listJamAwal.Count; indexUp++)
    {
        ja = listJamAwal[indexUp];
        jb = listJamAkhir[indexUp];
        n = listNota[indexUp];

        int count = jl.countNota(n);

        String penyewa = jl.getNamaPenyewa(n);
        String no_kontak = jl.getNomorKontak(n);
        String status = jl.getStatusSewa(n);

        for (int i = 1; i <= count; i++)
        {
            foreach (DataGridViewRow row in dgv_Jadwal_Sewa.Rows)
            {
                if (row.Cells[0].Value.ToString().Equals(ja))
                {
                    r = row.Index;

                    row.Cells[2].Value = penyewa;
                    row.Cells[3].Value = no_kontak;
                    row.Cells[4].Value = status;

                    if (ja != jb)
                    {
                        ja = jl.getJamAkhirbyJamAwal(ja);
                        row.Cells[2].Value = penyewa;
                        row.Cells[3].Value = no_kontak;
                        row.Cells[4].Value = status;
                        //dgv_Jadwal_Sewa.Rows[r].Selected = true;
                    }

                    break;
                }
            }
        }
    }

答案 1 :(得分:1)

访问项目的方式有两个问题:

  • 您可以在循环外部分配变量。这将获得索引在该时刻指向的值,并且稍后更改索引变量不会更改分配给变量的值。你必须在循环中分配变量,当然,除了循环开始之前你需要的count变量。

  • 您正在循环后递增indexUp变量,此时您不再使用它。你必须将它放在循环中,以便它可以在下一次迭代中用于将新值读入变量。

答案 2 :(得分:0)

我没有看到使用第一个循环使用“i”然后第二个使用foreach的任何意义。它完全错了 - 你正在做同样的事情“数”次! 您还需要更改penyewa,no_kontak,状态,因为您在循环中使用相同的值

此外,我从未见过如此令人困惑和不清楚的变量命名,如果你想让其他人使用它,你应该改变它:D