C# 需要向MessageBox显示一个数组,其中包含作业名行和学生名列

C# 需要向MessageBox显示一个数组,其中包含作业名行和学生名列,c#,arrays,winforms,C#,Arrays,Winforms,我需要在一个MessageBox中显示学生作业成绩的转换数组。我已经放下了转置的数组部分,但是我需要messagebox具有行和列标签 现在,输出消息框仅显示3行5列的等级矩阵: decimal[,] decGrades = { { 87m, 88m, 89m }, { 90m, 95m, 100m }, { 70m, 80m, 90m },

我需要在一个MessageBox中显示学生作业成绩的转换数组。我已经放下了转置的数组部分,但是我需要messagebox具有行和列标签

现在,输出消息框仅显示3行5列的等级矩阵:

    decimal[,] decGrades = { { 87m, 88m, 89m },
                             { 90m, 95m, 100m },
                             { 70m, 80m, 90m },
                             { 50m, 50m, 50m },
                             { 80m, 92m, 94m } };

        string[] strStudentNames = { "Adams", "Benson", "Carson", 
  "Daley", "Edwards" };
        string[] strAssignmentNames = { "HW1", "HW2", "Exam1" };




    private decimal[,] TransposeMatrix(decimal[,] newArray)
    {
        decimal[,] TransposedArray = new decimal[newArray.GetLength(1), 
    newArray.GetLength(0)];
        for (int column = 0; column < newArray.GetLength(1); column++)
        {
            for (int row = 0; row < newArray.GetLength(0); row++)
            {
                TransposedArray[column, row] = newArray[row, column];

            }
        }
        return TransposedArray;
    }




    private void BtnTranspose_Click(object sender, EventArgs e)
    {
        decGrades = TransposeMatrix(decGrades);

        ////CODE TO SEND GRADES ARRAY TO MESSAGE BOX
        string gradesString = "";



        for (int i = 0; i < decGrades.GetLength(0); i++)
        {
            for (int j = 0; j < decGrades.GetLength(1); j++)
            {
                gradesString += decGrades[i, j] + " ";
            }

            gradesString += "\n";
        }

        MessageBox.Show(gradesString, "Transposed Array");
decimal[,]deckgrades={{{87m,88m,89m},
{90米,95米,100米},
{70m,80m,90m},
{50m,50m,50m},
{80m,92m,94m};
字符串[]strStudentNames={“Adams”、“Benson”、“Carson”,
“戴利”、“爱德华兹”};
字符串[]strAssignmentNames={“HW1”、“HW2”、“Exam1”};
专用十进制[,]转置矩阵(十进制[,]新数组)
{
decimal[,]TransposeArray=新十进制[newArray.GetLength(1),
newArray.GetLength(0)];
for(int column=0;column
我似乎不知道如何将strStudentNames中的字符串数组值显示为列标签,将strAssignmentNames显示为行标签

我真的很感激能在这方面得到的任何帮助。谢谢!

你可以试试这个:

private void BtnTranspose_Click(object sender, EventArgs e)
{
  var matrix = TransposeMatrix(decGrades);

  // Create a form
  var form = new Form();
  form.Text = "Transposed Array";
  form.Size = new Size(500, 400);
  form.StartPosition = FormStartPosition.CenterParent;

  // Create a list view
  var listview = new ListView();
  listview.Dock = DockStyle.Fill;
  listview.View = View.Details;
  listview.FullRowSelect = true;

  // Initialize columns titles with first empty
  listview.Columns.Add("");
  for ( int indexD2 = 0; indexD2 < matrix.GetLength(1); indexD2++ )
    listview.Columns.Add(strStudentNames[indexD2]);

  // Add rows with first column as title
  for ( int indexD1 = 0; indexD1 < matrix.GetLength(0); indexD1++ )
  {
    var item = new ListViewItem();
    item.Text = strAssignmentNames[indexD1];
    for ( int indexD2 = 0; indexD2 < matrix.GetLength(1); indexD2++ )
      item.SubItems.Add(matrix[indexD1, indexD2].ToString());
    listview.Items.Add(item);
  }

  // Add the list view to the form and show it
  form.Controls.Add(listview);
  form.ShowDialog();
}

MessageBox不是表格数据的适当UI元素。它不是为此而设计的。它是为传递状态消息而设计的,例如错误和任务完成。您需要创建自己的表单,可以在DataGridView或类似控件中显示数据,并将其显示为模式对话框。您还可以使用DataGridView设置自定义表单的样式要将其视为包含行和列的MessageBox;)
public partial MyMessageBox : Form
{
  static public Run(decimal[,] matrix, string[] titleColumns, string[] titleRows)
  {
    if ( titleColumns.Length != matrix.GetLength(1) 
      || titleRows.Length != matrix.GetLength(0) )
      throw new ArgumentException("Bounds mismatch");
    var form = new MyMessageBox();
    form.ListView.Columns.Add("");
    for ( int indexD2 = 0; indexD2 < matrix.GetLength(1); indexD2++ )
      form.ListView.Columns.Add(titleColumns[indexD2]);
    for ( int indexD1 = 0; indexD1 < matrix.GetLength(0); indexD1++ )
    {
      var item = new ListViewItem();
      item.Text = titleRows[indexD1];
      for ( int indexD2 = 0; indexD2 < matrix.GetLength(1); indexD2++ )
        item.SubItems.Add(matrix[indexD1, indexD2].ToString());
      form.ListView.Items.Add(item);
    }
    form.ShowDialog();  
  }
}
private void BtnTranspose_Click(object sender, EventArgs e)
{
  MyMessageBox.Run(TransposeMatrix(decGrades), strStudentNames, strAssignmentNames);
}