一个MainDictionary中的多个词典c#

时间:2015-04-21 11:31:37

标签: c# dictionary datagridview

我希望你能给我一个暗示我的问题与我的代码。 我有一个DataGridView,它从Excelfile获取数据。 现在要在其中获取结构,我想创建组(dsdslls中的关键字)并将valueNames(dsdslls和dsll中的关键字的值)添加到该组,并将该内容(dslls的值)添加到valueNames作为KeyValuePair。

我的问题不是要添加所有内容,而是要将其恢复。

这是代码(添加内容):

    internal Dictionary<String, Dictionary<String, LinkedList<String>>> BuildList(DataGridView dgv)
    {
        //create the main Dictionary
        Dictionary<String, Dictionary<String, LinkedList<String>>> dsdslls = new Dictionary<String, Dictionary<String, LinkedList<String>>>();
        String groupName = "Project data", value = "", valueName = "", text = "";
        //run through the whole list 
        for (int i = 0; i < dgv.RowCount - 1; i++)
        {
            //create new Dictionary for the Content
            Dictionary<String, LinkedList<String>> dslls = new Dictionary<String, LinkedList<String>>();
            //check if the String at i is a groupName, if so add it to groupName
            if (isGroupName(dgv, i))
            {
                groupName = dgv.Rows[i].Cells[0].Value.ToString();
                text = "Adding in group: " + groupName + " to value: ";
            }
            //now go forward in the list until you next Cell is empty or the list ended
            do
            {
                //check if the String at i is a valueName, if so add it to valueName
                if (isValueName(dgv, i))
                {
                    //create the LinkedList for units and values
                    LinkedList<String> lls = new LinkedList<String>();
                    valueName = dgv.Rows[i].Cells[0].Value.ToString();
                    //check if group and valuename are NOT the same
                    if (isNotSame(valueName, groupName))
                    {
                        //now run the colums for units and values and add them to the List until you reach the end of used columns
                        int j = 0;
                        do
                        {
                            value = dgv.Rows[i].Cells[1 + j].Value.ToString();
                            lls.AddLast(value);
                            if (j == 0)
                            {
                                text += "\n" + valueName + " in (" + lls.First.Value.ToString() + "): ";
                            }
                            else
                            {
                                text += lls.Last.Value.ToString();
                            }
                            j++;
                        } while (j < dgv.Rows[i].Cells.Count - 1);
                        //add the valueName and List as new keyvaluepair to the dictionary.
                        dslls.Add(valueName, lls);
                    }
                }
                i++;
            } while (!isStringEmpty(dgv.Rows[i].Cells[0].Value.ToString()) && i < dgv.RowCount - 1);
            //show added content
            MessageBox.Show(text);
            //check if main dictionary contains the latest groupname, if not add the groupName and the last dictionary to the main dictionary
            if (!dsdslls.ContainsKey(groupName))
            {
                dsdslls.Add(groupName, dslls);
            }
        }
        MessageBox.Show("Building successfully finished.");
        return dsdslls;
    }

我没有将正确的内容返回到指定的groupName ...例如:“groupName =”Project Data“我找回了该组的内容:”Electrical Network“这是maindictionary中的下一个关键字

现在获取数据的代码:

           internal void /*Dictionary<String, LinkedList<String>>*/ GetGroupContent(Dictionary<String, Dictionary<String, LinkedList<String>>> dsdslls, String groupName)
    {
        //Dictionary<String, LinkedList<String>> dslls = new Dictionary<String, LinkedList<String>>();
        String groupN = "", text = "";
        //Check if Dictionary contains groupName
        if (dsdslls.ContainsKey(groupName))
        {
            //run through the dictionary
            foreach (var s in dsdslls)
            {
                //give back the keyword (just for the MessageBox)
                if (s.Key == groupName)
                {
                    groupN = s.Key;
                }
                else
                {
                    //run throught the little dictionary to get the keywords from it. 
                    foreach (var t in s.Value)
                    {
                        text += t.Key + "\n";
                    }
                }
            }
            MessageBox.Show("Content of Group " + groupN + ": \n" + text);
            text = "";
        }
        //return dslls;
    }

亲切的问候

的Mirko

1 个答案:

答案 0 :(得分:1)

很难理解您对此代码的期望,因为主要问题没有得到很好的描述。

无论如何,您的数据检索逻辑似乎可能存在问题。 如果要获取具有匹配名称的组的数据,则必须移动else语句的if部分。仅当找到具有正确名称的组时,才需要进行文本串联。

...
//give back the keyword (just for the MessageBox)
if (s.Key == groupName)
{
    groupN = s.Key;

    //run throught the little dictionary to get the keywords from it. 
    foreach (var t in s.Value)
    {
        text += t.Key + "\n";
    }
}
...