これはなぜ発生するのですか?DataGridViewCellの値は空ですが、実際には存在します
var tradeList = client.getTradeReports(criteria);
tradeGridView.DataSource = tradeList;
int rowCount = tradeGridView.Rows.Count;
foreach (DataGridViewRow row in tradeGridView.Rows)
{
for (int counter = 0; counter < columnNameAndFlag.Length; counter++)
{
if (row.Cells[columnNameAndFlag[counter].Split('-')[0]].Value == null || row.Cells[columnNameAndFlag[counter].Split('-')[0]].Value == DBNull.Value || String.IsNullOrWhiteSpace(row.Cells[columnNameAndFlag[counter].Split('-')[0]].Value.ToString()))
tradeData.Add("");
else
{
if (columnNameAndFlag[counter].Split('-')[0] == "TransactTime")
tradeData.Add(dt.AddSeconds(Convert.ToDouble(row.Cells[columnNameAndFlag[counter].Split('-')[0]].Value)).ToLocalTime().ToString());
else
tradeData.Add(row.Cells[columnNameAndFlag[counter].Split('-')[0]].Value.ToString());
}
}
}
foreachループを使用しないと、データグリッドにデータが表示されます。しかし、私はforeachループを使用すると、すべてのセルの値は空/ nullを返します。
の条件を満たし、なぜこれだけの行だMessageBox.Show(row.Cells[anyColumn].Value.ToString()); // messagebox shows nothing
:
if (row.Cells[columnNameAndFlag[counter].Split('-')[0]].Value == null || row.Cells[columnNameAndFlag[counter].Split('-')[0]].Value == DBNull.Value || String.IsNullOrWhiteSpace(row.Cells[columnNameAndFlag[counter].Split('-')[0]].Value.ToString()))
EDIT:
これは私が列を作成し、手動でリストとそれぞれの新しいセルの値を設定する方法である:
List<string> tradeData = new List<string>();
string columnSettings = ConfigurationManager.AppSettings["columnSettings"];
string[] columnNameAndFlag = columnSettings.Split(',');
var tradeList = client.getTradeReports(criteria);
tradeGridView.DataSource = tradeList;
int rowCount = tradeGridView.Rows.Count;
foreach (DataGridViewRow row in tradeGridView.Rows)
{
for (int counter = 0; counter < columnNameAndFlag.Length; counter++)
{
if (row.Cells[columnNameAndFlag[counter].Split('-')[0]].Value == null || row.Cells[columnNameAndFlag[counter].Split('-')[0]].Value == DBNull.Value || String.IsNullOrWhiteSpace(row.Cells[columnNameAndFlag[counter].Split('-')[0]].Value.ToString()))
tradeData.Add("");
else
{
if (columnNameAndFlag[counter].Split('-')[0] == "TransactTime")
tradeData.Add(dt.AddSeconds(Convert.ToDouble(row.Cells[columnNameAndFlag[counter].Split('-')[0]].Value)).ToLocalTime().ToString());
else
tradeData.Add(row.Cells[columnNameAndFlag[counter].Split('-')[0]].Value.ToString());
}
}
}
tradeGridView.DataSource = null;
tradeGridView.Columns.Clear();
for (int counter = 0; counter < columnNameAndFlag.Length; counter++)
{
tradeGridView.Columns.Add(columnNameAndFlag[counter].Split('-')[0], columnNameAndFlag[counter].Split('-')[0]);
if (columnNameAndFlag[counter].Split('-').Last() == "1")
tradeGridView.Columns[columnNameAndFlag[counter].Split('-')[0]].Visible = true;
else
tradeGridView.Columns[columnNameAndFlag[counter].Split('-')[0]].Visible = false;
}
for (int index = 0; index < rowCount; index++)
tradeGridView.Rows.Add();
int i = 0;
foreach (DataGridViewRow row in tradeGridView.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
cell.Value = tradeData[i];
i++;
}
}
'counter
@P。 pat yes、カウンタはインクリメント –
あなたは 'foreach'ループをデバッグし、ループするセルの実際の値をチェックすることができます。あなたが投稿したコードは動作するはずです。 – Fabio