c# - 无法将结果显示为字符串值

时间:2018-03-09 09:49:57

标签: c#

我正在研究c#中的程序。共有3列。我们称他们为A,B和C. 如果未选中B列中的任何行但检查了列A,则应弹出显示警告消息,指示已选中A列但未选中B列的位置ID(行)。

我设法创建显示消息来执行此操作,但它没有在消息框中获取位置,而是显示以下值: " DataGridView Column [0] Row[2] "

我想我必须将我的locationID变量列表转换为字符串,但结果是相同的。

以下是声明ListLocationID的代码:

 List<string> listLocationID = new List<string>();
                List<int> listLocationIDIndex = new List<int>();


    for (int i = 0; i < this.dataGridLocationDetails.Rows.Count; i++)
                {
         if (((Convert.ToBoolean(dataGridLocationDetails.Rows[i].Cells["colViewPermission"].Value) == true)
                         && (Convert.ToBoolean(dataGridLocationDetails.Rows[i].Cells["colIssuePermission"].Value) == false)
                     ))
                    {
                            listLocationID.Add(dataGridLocationDetails.Rows[i].Cells["colLocationID"].ToString());

               listLocationIDIndex.Add(i);

     }


                        }

                bool isEmpty = true;
                if (listLocationID.Count > 0)
                    isEmpty = false;

        if(!isEmpty) 
        {
            string message = string.Format("The following Location ID has view permission but not issue permission:{0}  Do you wish to continue?", DisplayString(listLocationID));
        DialogResult dialogResult = MessageBox.Show(message, "WARNING", MessageBoxButtons.YesNo);

          if (dialogResult == DialogResult.Yes)                       
         {                            
        for (int i = 0; i < listLocationIDIndex.Count; i++)                
        {

        }
         }                        
        else if (dialogResult == DialogResult.No)                       
         {                            
        return;                        
        }
        } 

以下是显示字符串的代码的一部分:

 private string DisplayString(List<string> listLocationID)
        {
            String strSentence = string.Empty;
            for (int i = 0; i < listLocationID.Count; i++)
            {
                strSentence = strSentence + (listLocationID[i].ToString());

            }

            return strSentence;
        }

注意:listLocationID [i]应该在消息框中显示位置名称。而是显示索引列名称。

以下是复选框选择的快照: [![在此处输入图像说明] [1]] [1]

以下是我得到的输出的快照: [![在此处输入图像说明] [2]] [2]

感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

使用

listLocationID.Add(dataGridLocationDetails.Rows[i].Cells["colLocationID"].Value.ToString());

而不是

listLocationID.Add(dataGridLocationDetails.Rows[i].Cells["colLocationID"].ToString());

要允许评论中提到的整洁格式:

使用StringBuilder而不是string

StringBuilder strSentence = new StringBuilder();
for (int i = 0; i < listLocationID.Count; i++)
{
     strSentence.Append(listLocationID[i]);
     strSentence.AppendLine();
}

return strSentence.ToString();

答案 1 :(得分:0)

循环看起来不错。你不必显式转换为字符串,因为它是字符串数组。

public class Program
{
    public static void Main(string[] args)
    {
    List<string> listLocationID = new List<string>();
    listLocationID.Add("one");
    listLocationID.Add("two");
    listLocationID.Add("three");

     String strSentence = string.Empty;
     for (int i = 0; i < listLocationID.Count; i++)
        {
         strSentence = strSentence + (listLocationID[i]);
        }
        Console.Write(strSentence);
    }
}

你也可以试试foreach

foreach (String locationID in listLocationID)
 {
  strSentence = strSentence + locationID ;
 }