我有一个包含经度和纬度值的dataGridView。
我需要通过将值传递给DoSomethingMethod()
来使用该值。
我不熟悉dataGridView,因此我从dataGridView复制所有值并用List<>
下面是我操作dataGridView
内部数据的代码Public Main()
{
List<double> lst_Long = new List<double>();
List<double> lst_Latt = new List<double>();
for (int rows = 0; rows < dataGridView1.Rows.Count; rows++)
{
lst_Long.Add(Convert.ToDouble(dataGridView1.Rows[rows].Cells["Long"].Value));
lst_Latt.Add(Convert.ToDouble(dataGridView1.Rows[rows].Cells["Latt"].Value));
}
int ColumnCount = lst_Long.Count - 1;
int RowCount = lst_Row.Count - 1;
//Pass the list to DoSomethingMethod
DoSomethingMethod(lst_Long , lst_Latt, ColumnCount, RowCount);
}
DoSomethingMethod(List<double> lst_long, List<double> lst_latt, int ColumnCount, int RowCount)
{
for (int iColumn = 0; iColumn < ColumnCount; iColumn++)
{
for (int iRow = 0; iRow < RowCount; iRow++)
{
// access my latitude value and longitude value here
double myX = lst_latt[iRow]
double myY = lst_long[iRow]
// do some processing here with the value, lets say....
double myNewX = myX + 10;
double myNewY = myY + 10;
PassNewDataToAnotherMethod( myNewX , myNewY );
}
}
}
我想问一下,如果有任何其他方法可以直接使用并从Columns["Long"]
和Columns["Latt"]
的dataGridView获取单元格值,并执行类似的操作,将复制值从dataGridView转换为清单?
感谢〜
更新:下面是我的DGV表(数据是随机的,不是真实的)
更新我自己的答案,此问题将关闭
// Pass the whole dataGridView1 into method and access the value through row count.
DoSomethingMethod(DataGridView dataGridView1)
{
for (int rows = 0; rows < dataGridView1.Rows.Count; rows++)
{
double myX = Convert.ToDouble(dataGridView1.Rows[rows].Cells["Latt"].Value);
double myY = Convert.ToDouble(dataGridView1.Rows[rows].Cells["Long"].Value);
}
}
答案 0 :(得分:2)
这样做的一种方式(我想到的)是将BindingSource
与自定义模型一起使用,因此您不会在行上操作数据绑定模型。这样的事情:
public class Location
{
public double Latitude { get; set; }
public double Longitude { get; set; }
}
//绑定网格
var bs = new BindingSource();
bs.DataSource = listOfLocations; // List<Location>
dataGridView1.DataSource = bs; // thanks to binding source all changes in datagrid are
// propagated to underlying data source (ie. List<Location>
然后您可以在listOfLocations
上操作而无需自己访问单元格中的值。
答案 1 :(得分:1)
我不确定你到底想要实现的目标。这是另一个解决方案。希望这个解决方案对你有用。
您可以使用linq创建元组列表并将其发送到NewDoSomething方法,如下所示
Public Main()
{
//Generate a list of Tuples using linq
var tuples = from row in dataGridView1.Rows.Cast<DataGridViewRow>()
select new Tuple<double, double>(
Convert.ToDouble(row.Cells["longitude"].Value),
Convert.ToDouble(row.Cells["latitude"].Value));
//Pass the tuple list to DoSomethingMethod
DoSomethingMethod(tuples);
}
private void DoSomeThing(IEnumerable<Tuple<double, double>> tuples)
{
//Iterate through the tuples
foreach (Tuple<double, double> tuple in tuples)
{
double myX = tuple.Item1;
double myY = tuple.Item2;
}
}
当然这段代码可以改进。这只是展示了你可以使用的方法。
答案 2 :(得分:0)
如果您使用DataTable
作为数据源,可以尝试这样做:
public void Main()
{
DoSomethingMethod((DataTable)dataGridView1.DataSource);
}
private void DoSomethingMethod(DataTable dataTable)
{
foreach (DataRow row in dataTable.Rows)
{
double myX = Convert.ToDouble(row["Latt"]);
double myY = Convert.ToDouble(row["Long"]);
}
}