0

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

当我做一个 Console.Write(sendRConCommand("players"))

这将输出到我的控制台:

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

4 回答 4

1

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

如果它的 DataGridView (winform) 那么数据源接受一个列表<>..

于 2012-11-28T11:57:04.030 回答
1

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

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

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

于 2012-11-28T11:58:23.423 回答
1

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

我建议,您根据回车拆分数据,然后为每个玩家行(从第 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你的网格在哪里。

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

于 2012-11-28T12:16:06.213 回答
0

好的,如果您想要 WPF 网格,请执行以下操作:

DataGrid一张表格。将 DataGrid 的AutoGenerateColumns属性设置为True.

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

于 2012-11-28T12:05:59.160 回答