将信息显示到网格中

时间:2012-11-28 11:51:19

标签: c# .net visual-studio-2012

我有一个按钮,如果我点击它,它会在游戏服务器上检索玩家信息。 我需要找出一种在网格中显示它的方法。

当我做一个Console.Write(sendRConCommand(“播放器”))

这是输出到我的控制台:

Players on server:
[#] [IP Address]:[Port] [Ping] [GUID] [Name]
--------------------------------------------------
0   XXX.XXX.XXX.XXX:XXXX    46   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) [FF]Otto
1   XXX.XXX.XXX.XXX:XXXX   109  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) [BBC] Emma Watson
2   XXX.XXX.XXX.XXX:XXXX      46   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) [FF]Miikka
3   XXX.XXX.XXX.XXX:XXXX   46   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) Bops
4   XXX.XXX.XXX.XXX:XXXX      32   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) [BBC] Wesley Snipes
5   XXX.XXX.XXX.XXX:XXXX    31   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) Pierre
6   XXX.XXX.XXX.XXX:XXXX     46   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) bertrand
7   XXX.XXX.XXX.XXX:XXXX     -1   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) SIGGI (Lobby)
8   XXX.XXX.XXX.XXX:XXXX    47   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) Min (Lobby)
9   XXX.XXX.XXX.XXX:XXXX     32   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) Frostpwnz
10  XXX.XXX.XXX.XXX:XXXX   31   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) Zulu BASSA (Lobby)
11  XXX.XXX.XXX.XXX:XXXX     31   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) Zardock (Lobby)
14  XXX.XXX.XXX.XXX:XXXX    63   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(OK) plbmas
(13 players in total)

我需要弄清楚如何在网格中显示此信息,同时显示列标题。

提前致谢:)

4 个答案:

答案 0 :(得分:1)

这将取决于它如何从游戏服务器传回...如果它来自一个字符串然后这需要解析(拆分)然后排列成你的网格处理的格式..

如果它的DataGridView(winform)然后数据源接收列表<> ..

答案 1 :(得分:1)

您可以使用string.Format指定宽度,如下所示:

string.Format("{0,-10}{1,-10}", "column1", "column2");

其中负数表示左对齐值。见这里:http://msdn.microsoft.com/en-us/library/fht0f5be.aspx

答案 2 :(得分:0)

好的,如果你想要WPF网格,请做下一步:

DataGrid放在表单上。将DataGrid的AutoGenerateColumns属性设置为True

在代码隐藏集dataGrid.ItemsSource = playerInfo(列表数组)

答案 3 :(得分:0)

您需要将文本转换为数据结构。目前它是全文,因此它只会显示在一列中。

我建议你根据回车分割数据,然后对每个玩家行(第3行以后)拆分数据。以下是粗略的代码大纲,根据需要进行编辑。

        // Setup Datatable to hold the information
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[] {
            new DataColumn("Number", typeof(int)), 
            new DataColumn("IP Address", typeof(string)),
            new DataColumn("Ping", typeof(int)),
            new DataColumn("GUID", typeof(string)),
            new DataColumn("Name", typeof(string))
        });

        // Get info            
        string info = sendRConCommand("players");

        // Split Rows
        string[] infoRows = info.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
        int start = 3; // ignore first 3 lines
        while (start < infoRows.Length - 1) // Ignore last line
        {
            // Split row on spaces, and remove anything that is an empty space
            string[] row = infoRows[start].Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
            DataRow dr = dt.NewRow();
            dr["Number"] = int.Parse(row[0].ToString());
            dr["IP Address"] = row[1].ToString();
            dr["Ping"] = int.Parse(row[2].ToString());
            dr["GUID"] = row[3].ToString();
            int nameItem = 4;
            while (nameItem < row.Length)
            {   // Names can have spaces, so we need to merge
                dr["Name"] += " " + row[nameItem].ToString();
                nameItem++;
            }
            dr["Name"] = dr["Name"].ToString().Trim(); // Trim any leading spaces
            dt.Rows.Add(dr);
            start++;
        }

        // Job Done
        mygridview.DataSource = dt;

mygridview是您的网格。

我已将其全部放入数据表中,但自定义对象,列表等也可以使用。