我似乎无法访问我的专栏中的实际值;我每行的值最终都是相同的实际行数。我似乎无法解决这个问题。任何帮助,将不胜感激。这是我目前的方法:
private string converter() {
string binaryString = string.Empty;
int cellValue = 0;
int colIndex = 3;
foreach(DataGridViewRow row in this.dataGridView1.Rows)
{
cellValue = (int) row.Cells[colIndex].Value;
binaryString = parseString(cellValue);
}
return binaryString;
}
答案 0 :(得分:0)
您正在每个循环持续时间中替换“binaryString”的值。
我不确定你的目标是什么,但也许这就是你的意思:
binaryString += parseString(cellValue);
注意 + =
编辑 - 另一种方法?
也许您希望转换列中的每个值?那试试吧。
private List<String> converter()
{
List<String> binaryStrings = new List<String>();
int cellValue = 0;
int colIndex = 3;
foreach(DataGridViewRow row in this.dataGridView1.Rows)
{
cellValue = (int) row.Cells[colIndex].Value;
binaryStrings.Add(parseString(cellValue));
}
return binaryStrings;
}
这将为您提供已转换字符串的列表。每行一个字符串。
答案 1 :(得分:0)
如果您使用的是DataTable
,我认为您不能让Expression
将基数为10的数字转换为二进制字符串表示形式。但是,只要DataRow
发生更改,就可以将二进制字符串添加到单元格中。如果DataRow
中DataTable
发生更改,则代码可以将基数10值转换为二进制字符串表示形式,并将字符串添加到正确的单元格中。
为了实现这一点,代码需要在填充RowChanged
之前注册DataTable
事件。此外,由于在RowChanged
事件中更改了值,因此当代码将二进制字符串添加到表时,必须关闭此事件。这样可以防止出现明显的无限循环,每次将二进制字符串添加到行中时,循环都会自动调用。
您需要更改名称以符合您的要求。以下是使用RowChanged
注册DataTable
事件所需的行。请注意,在使用数据填充表之前,需要设置此行。
gridTable.RowChanged += new DataRowChangeEventHandler(Row_Changed);
然后我们需要的是这个Row_Changed
方法。注意,事件是从DataTable
取消注册的,以避免无限循环。
private static void Row_Changed(object sender, DataRowChangeEventArgs e) {
gridTable.RowChanged -= new DataRowChangeEventHandler(Row_Changed);
DataRow dr = e.Row;
int base10 = (int)dr["Base10"];
string binary = Convert.ToString(base10, 2);
dr["Binary"] = binary;
gridTable.RowChanged += new DataRowChangeEventHandler(Row_Changed);
}
我猜测可能有其他方法可以实现这一点,这里的目标是避免必须遍历网格来设置二进制字符串。希望这会有所帮助。
答案 2 :(得分:0)
我正在寻找解决您问题的方法... 在这里,我来了。。
在这里工作。
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
if(column.Name == "wanted column name")
{
for(int iRow = 0; iRow < dataGridView1.RowCount; iRow++)
{
string data = (string)dataGridView1[column.Index, iRow].Value;
//Do something with data
}
}
}