Если вы используете DataGrid, вы можете получить коллекцию записей в свойстве Items.
foreach (DataGridItem item in dataGrid.Items)
{
//...
var data = item.Cells[0].Text;
//or
CheckBox chkBox = (CheckBox)item.FindControl("MyCheckBox");
if (chkBox.Checked)
{
// do something
}
}
DataGridView имеет свойство Rows , а DataGrid имеет свойство Items для записи коллекция.
Это не потому, что структура является вложенной, а потому, что вам нужен получатель-указатель для изменения значения, на которое указывает получатель, в данном случае ваша переменная a
.
Без указателя ваш метод UpdateB
будет обновлять только копию исходного значения структуры.
См. Следующее:
package main
import "fmt"
type B struct {
c int
}
type A struct {
b B
}
func (a *A) UpdateB(n int) {
a.b.c = n
}
func main() {
a := A{b: B{c: 5}}
fmt.Println(a)
a.UpdateB(50)
fmt.Println(a)
}
Проблема с вашей функцией обновления. Вы должны добавить его к указателю на A.
func (a *A) updateB(n int) {
a.b.c = n
}
Чтобы любой интерфейс для его объектов обновлялся функцией, вам нужно передать объект по ссылке.
package main
import "fmt"
type B struct {
c int
}
type A struct {
b B
}
func (a *A) updateB(n int) {
a.b.c = n
}
func main() {
a := A{b: B{c: 5}}
fmt.Println(a)
a.updateB(42)
fmt.Println(a)
}
Это потому, что вы используете получатель значения, поэтому метод updateB получает копию значения A
, а не указатель на память, которая содержит переменную a
. Использование приемника указателя устраняет проблему:
package main
import "fmt"
type B struct {
c int
}
type A struct {
b B
}
func (a *A) updateB(n int) {
a.b.c = n
}
func main() {
a := A{b: B{c: 5}}
fmt.Println(a)
a.updateB(42)
fmt.Println(a)
}
https://play.golang.org/p/XBrxd246qT3
См. Также:
[118 ] Приемник значения и приемник указателя на Голанге?