【问题标题】:Index won't up of List索引不会超出列表
【发布时间】:2013-06-13 22:21:08
【问题描述】:

我还在学习编程

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

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++;
}

【问题讨论】:

  • 你可以在这里看到结果img21.imageshack.us/img21/2295/i84.png
  • 是的,将indexUp++ 放入您的for 循环中。虽然我建议查看 DataTable 类并将您的 DataGridView 绑定到表。省去了很多工作。
  • 我试过插入循环,还是不行,我试着把它放在break的上面;
  • 即使您在循环内移动indexUp 使其递增,您仍然没有使用新值。您只能在循环外使用indexUp。您使用该值来获取count,而count 又用于再次遍历循环...
  • 如果您单步执行代码并在执行此操作时检查值,您可能会找出问题所在。我建议您将使用 IEnumerable 的方式更改为更方便的 foreach 方法。

标签: c# list datagridview indexing


【解决方案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;
                }
            }
        }
    }

【讨论】:

  • 谢谢您,先生...我真的很感谢您...谢谢您的帮助,告诉我哪里出错了。
【解决方案2】:

您如何访问这些项目有两个问题:

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

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

【讨论】:

    【解决方案3】:

    我看不出将第一个循环与“i”一起使用,然后将第二个循环与 foreach 一起使用。它完全错误 - 你正在做同样的事情“计数”次! 您还需要更改 penyewa、no_kontak、状态,因为您在循环中使用相同的值

    此外,我从未见过如此混乱和不明确的变量命名,如果你想让其他人使用它,你应该改变它:D

    【讨论】:

      猜你喜欢
      • 2020-09-04
      • 2017-10-29
      • 2018-12-16
      • 2011-06-14
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多