为什么DataGridViewRow.Cells [1] .Value在它不为空时返回null?

时间:2016-12-14 14:03:46

标签: c# winforms datagridview

考虑这个非常简单的测试项目:

DataGridView1有2列,两者都是在设计时通过右键/编辑列设置的 在ctor DataGridView1中填充了11个记录
运行应用程序时,DataGridView1中显示了11条记录

现在出现问题。
当您单击该按钮时,将调用方法CreateResultDataTable()并在

上抛出空引用异常
row.Cells[1].Value.ToString()  

值似乎为null,而我知道它不是。

现在对于奇怪的部分,在调试时我将鼠标移到行上,我看到它有2个单元格。所以我将鼠标移到它上面并打开单元格枚举,而不是打开第二个单元格,实际值为null 所以现在我将鼠标移到dataGridView1.Rows上并将鼠标移动到11行中的第一行,而不是再移动到单元格上并打开枚举,当我进入第二个单元格时,值不是NULL!
它们不是同一个对象吗?

这怎么可能?以及如何解决这个问题?

我尝试使用列的名称而不是索引,但结果保持不变,我仍然得到了nulreference异常。

这是该程序的完整代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        LoadMapping();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        dataGridView2.DataSource = CreateResultDataTable();
    }

    private DataTable CreateResultDataTable()
    {
        DataTable Result = new DataTable();
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            Result.Columns.Add(row.Cells[1].Value.ToString()); // why is Value null here ??
        }
        return Result;
    }

    private void LoadMapping()
    {
        dataGridView1.Rows.Add("Message//Header//Message_Type", "MessageType");
        dataGridView1.Rows.Add("Message//Header//Creation_Date", "MessageDate");
        dataGridView1.Rows.Add("Message//Header//Sequence_Number", "MessageSequenceNumber");
        dataGridView1.Rows.Add("Message//Header//Sender", "MessageSender");
        dataGridView1.Rows.Add("Message//Header//Receiver", "MessageReceiver");
        dataGridView1.Rows.Add("Message//Detail//Visit//Transport_Reference_Out", "LotNumber");
        dataGridView1.Rows.Add("Message//Detail//Visit//Licenseplate", "TruckPlate");
        dataGridView1.Rows.Add("Message//Detail//Visit//Cargo//VIN", "ChassisNumber");
        dataGridView1.Rows.Add("Message//Detail//Visit//Cargo//Make", "BrandName");
        dataGridView1.Rows.Add("Message//Detail//Visit//Cargo//LoadDate", "LaadDatum");
    }
}

1 个答案:

答案 0 :(得分:1)

你需要添加这个,标题也是行。在使用import io.gatling.core.Predef._ import io.gatling.http.Predef._ class SimulationAmritPalSingh extends Simulation { val httpConf = http .baseURL("http://computer-database.gatling.io") .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") .doNotTrackHeader("1") .acceptLanguageHeader("en-US,en;q=0.5") .acceptEncodingHeader("gzip, deflate") .userAgentHeader("Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0") val scn = scenario("BasicSimulation") .exec(http("request_1") .get("/")) .pause(5) setUp( scn.inject(atOnceUsers(1)) .protocols(httpConf)) } 之前,必须检查单元格是否具有值(不为空),如果单元格为空,则方法Tostring()抛出异常。

ToString()