C#while循环问题 [英] C# while loop problem

查看:55
本文介绍了C#while循环问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,



我正在开展一个项目并试图在过去两周内解决同样的问题!

我接受了,我无法解决,需要你的帮助。



基本上我有一个datagrid和一个excel文件。它们有不同的值。

在Excel中我有一些列,如report_no_1或report_no_1_1等。在这个列中,一些测量值将来自我的数据网格。



我的数据网格基本相同,只有我有2列:报告编号和测量值



编辑报告编号从字符串中获取第一个编号。所以我有2为report_no_2或report_no_2_12



示例Excel模板:



Report_No_1 | Report_no_2_1 | Report_no_2_2 | Report_no_3 |等等......



Datagrid模板:



2 | 21,3

2 | 22,4

3 | 12,1

5 | 11,1









东西非常简单。我想从excel单元格中获取字符串中的第一个数字,并与datagrid中的每个数据的datagrid数字进行比较。如果他们是等于需要在报告编号下将测量结果写入excel文件。



我正在比较它们,因为有一些空的空间。例如,datagrid中没有4值。所以我需要检查。



这是我的代码。如果只有一个空的空间(例如,数据网格中没有4值,那么我需要给出一个空的空格来表示),它不能第一次工作。



当我检查它似乎相等。只有一行后我才想写excel。它写到上一栏。



请帮帮我。





akademi是我在Excel上的第一个列索引。





  int  akademi =  5 ; 
raporBos ++;

int toplamStr = dataGridView1.Rows.Count;
for int i = 0 ; i < toplamStr-1; i ++)
{
int nope = Int32 .Parse(dataGridView1.Rows [i] .Cells [ 0 ]。Value.ToString( ));
double olcumi = double .Parse(dataGridView1.Rows [i] .Cells [ 1 ] Value.ToString())。
int abc = 0 ;
int cag;
int gac;
if (!String.IsNullOrEmpty(raporAralik.Cells [raporBasSatZ,akademi] .Value))
{
string [] cagF =(raporAralik.Cells [raporBasSatZ,akademi] .Value.ToString()。Substring( 8 )) .Split(' _');
cag = Int32 .Parse(cagF [ 1 ]);
gac = Int32 .Parse(dataGridView1.Rows [i] .Cells [ 0 ]。 Value.ToString());
Debug.WriteLine(gac + gac || + cag + cag);
int osman = gac - cag;
while (cag < gac)
{
Debug。 WriteLine( *** + gac + gac || + cag + cag );
akademi ++;
if (!String.IsNullOrEmpty(raporAralik.Cells [raporBasSatZ,akademi] .Value))
{
string [] cagG =(raporAralik.Cells [raporBasSatZ,akademi] .Value.ToString()。Substring( 8 )) .Split(' _');
cag = Int32 .Parse(cagG [ 1 ]);
}

abc ++;
if (abc == 100
{
断裂;
}
}

raporWrkS.Cells [raporBos,akademi] = Math.Round(olcumi, 3 );
akademi ++;

}

else
{
断裂;
}
}





我的尝试:



while循环,if语句,for循环

解决方案

按要求绑定到数据的示例...

 使用 System.Collections.Generic; 
使用 System.ComponentModel;
使用 System.Windows.Forms;

namespace WinFormDataGridBinding
{
public partial class Form1:Form
{
public Form1()
{
InitializeComponent();
BindData();
}

private void BindData()
{
Persons.Add( new Person {Name = Joe,Surname = Smith});
Persons.Add( new Person {Name = ,Surname = Doe});

PersonsBindingList = new BindingList< Person>(人);
dataGridView1.DataSource = new BindingSource(PersonsBindingList, null );
}

public 列表< Person>人员{获取; } = new 列表< Person>();
public BindingList< Person> PersonsBindingList { get ; private set ; }
}

public class Person
{
public string 名称{ get ; set ; }
public string 姓氏{ get ; set ; }
}
}


不是你问题的解决方案,而是你可能学到的东西。

正确的缩进有助于阅读代码并显示代码的结构。

  int  akademi =  5 ; 
raporBos ++;

int toplamStr = dataGridView1.Rows.Count;
for int i = 0 ; i < toplamStr-1; i ++)
{
int nope = Int32 .Parse(dataGridView1.Rows [i] .Cells [ 0 ]。Value.ToString( ));
double olcumi = double .Parse(dataGridView1.Rows [i] .Cells [ 1 ] Value.ToString())。
int abc = 0 ;
int cag;
int gac;
if (!String.IsNullOrEmpty(raporAralik.Cells [raporBasSatZ,akademi] .Value))
{
string [] cagF =(raporAralik.Cells [raporBasSatZ,akademi] .Value.ToString()。Substring( 8 )) .Split(' _');

cag = Int32 .Parse(cagF [ 1 ]);
gac = Int32 .Parse(dataGridView1.Rows [i] .Cells [ 0 ]。 Value.ToString());
Debug.WriteLine(gac + gac || + cag + cag);
int osman = gac - cag;
for int l = 0 ; l < osman; l ++)
{
akademi ++;
}
/ *
while(cag< gac)
{
Debug.WriteLine(***+ gac +gac ||+ cag +cag);
akademi ++;
if(!String.IsNullOrEmpty(raporAralik.Cells [raporBasSatZ,akademi] .Value))
{
string [] cagG =(raporAralik.Cells [raporBasSatZ,akademi] .Value.ToString ().Substring(8))分割( '_')。

cag = Int32.Parse(cagG [1]);
}

abc ++;
if(abc == 100)
{
break;
}
}
* /

raporWrkS.Cells [raporBos,akademi] = Math.Round(olcumi, 3 );
akademi ++;
}
其他
{
break ;
}
}



像NotePad ++这样的程序员编辑器也有Visual Studio这样的功能。

Notepad++主页 [ ^ ]


Hello everyone,

I'm working on a project and trying to solve same problem on last 2 weeks !
I accepted, i can't solve and need some help from you.

Basically i have a datagrid and an excel file. They have different values.
In excel i have some columns like "report_no_1" or "report_no_1_1" etc. Under this colums some measurements will come from my datagrid.

My datagrid is basically same, just i have 2 columns : Report No and Measurement

I edited report no for get just first number from the string. So i have 2 for report_no_2 or report_no_2_12

Sample Excel Template :

Report_No_1 | Report_no_2_1 | Report_no_2_2 |Report_no_3 | etc.....

Datagrid template :

2 | 21,3
2 | 22,4
3 | 12,1
5 | 11,1
etc.



Thing is very simple. I want to get first number in string from excel cell and compare with my datagrid number for every data in datagrid. If they are equel than need to write measurement to excel file under the report no.

I'm comparing them cause there is some empty space. For example there isn't a 4 value in the datagrid. So i need to check.

Here is my code. If there is just one empty space ( for example there isn't a 4 value in data grid then i need to give an empty space to excel ) it doesn't work first time.

When i checked it seems equal.And just one line later i'm trying to write excel. It wrote to previous column.

Please help me.


akademi is my first column index on excel.


int akademi = 5;
raporBos++;

int toplamStr = dataGridView1.Rows.Count;
for (int i = 0; i < toplamStr-1; i++)
     {
       int nope = Int32.Parse(dataGridView1.Rows[i].Cells[0].Value.ToString());
       double olcumi = double.Parse(dataGridView1.Rows[i].Cells[1].Value.ToString());
       int abc = 0;
       int cag;
       int gac;
       if (!String.IsNullOrEmpty(raporAralik.Cells[raporBasSatZ, akademi].Value))
           {
            string[] cagF = (raporAralik.Cells[raporBasSatZ, akademi].Value.ToString().Substring(8)).Split('_');
            cag = Int32.Parse(cagF[1]);
            gac = Int32.Parse(dataGridView1.Rows[i].Cells[0].Value.ToString());
            Debug.WriteLine(gac + " gac || " + cag + " cag");
            int osman = gac - cag;
            while (cag < gac)
                  {
                   Debug.WriteLine("*** "+gac + " gac || " + cag + " cag");
                   akademi++;
                   if (!String.IsNullOrEmpty(raporAralik.Cells[raporBasSatZ, akademi].Value))
                       {
                        string[] cagG = (raporAralik.Cells[raporBasSatZ, akademi].Value.ToString().Substring(8)).Split('_');
                        cag = Int32.Parse(cagG[1]);
                       }

                   abc++;
                   if (abc == 100)
                        {
                         break;
                        }
                    }
                                    
            raporWrkS.Cells[raporBos, akademi] = Math.Round(olcumi, 3);
            akademi++;

       }

       else
           {
            break;
           }
}



What I have tried:

while loop, if statement, for loop

解决方案

An example of Binding to Data as requested...

using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;

namespace WinFormDataGridBinding
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            BindData();
        }

        private void BindData()
        {
            Persons.Add(new Person { Name = "Joe", Surname = "Smith" });
            Persons.Add(new Person { Name = "Jane", Surname = "Doe" });

            PersonsBindingList = new BindingList<Person>(Persons);
            dataGridView1.DataSource = new BindingSource(PersonsBindingList, null);
        }

        public List<Person> Persons { get; } = new List<Person>();
        public BindingList<Person> PersonsBindingList { get; private set; }
    }

    public class Person
    {
        public string Name { get; set; }
        public string Surname { get; set; }
    }
}


Not a solution to your question, but something you might learn.
Proper indentation helps reading code and show the structure of your code.

int akademi = 5;
raporBos++;

int toplamStr = dataGridView1.Rows.Count;
for (int i = 0; i < toplamStr-1; i++)
{
    int nope = Int32.Parse(dataGridView1.Rows[i].Cells[0].Value.ToString());
    double olcumi = double.Parse(dataGridView1.Rows[i].Cells[1].Value.ToString());
    int abc = 0;
    int cag;
    int gac;
    if (!String.IsNullOrEmpty(raporAralik.Cells[raporBasSatZ, akademi].Value))
    {
        string[] cagF = (raporAralik.Cells[raporBasSatZ, akademi].Value.ToString().Substring(8)).Split('_');

        cag = Int32.Parse(cagF[1]);
        gac = Int32.Parse(dataGridView1.Rows[i].Cells[0].Value.ToString());
        Debug.WriteLine(gac + " gac || " + cag + " cag");
        int osman = gac - cag;
        for (int l = 0; l < osman; l++)
        {
            akademi++;
        }
        /*
        while (cag < gac)
        {
            Debug.WriteLine("*** "+gac + " gac || " + cag + " cag");
            akademi++;
            if (!String.IsNullOrEmpty(raporAralik.Cells[raporBasSatZ, akademi].Value))
            {
                string[] cagG = (raporAralik.Cells[raporBasSatZ, akademi].Value.ToString().Substring(8)).Split('_');

                cag = Int32.Parse(cagG[1]);
            }

            abc++;
            if (abc == 100)
            {
                break;
            }
        }
        */
        raporWrkS.Cells[raporBos, akademi] = Math.Round(olcumi, 3);
        akademi++;
    }
    else
    {
        break;
    }
}


A programmer's editor like NotePad++ have such function Visual Studio too.
Notepad++ Home[^]


这篇关于C#while循环问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆