在我问这个之前,我做了一些检查,以确保这不会是一个重复和方法从其模板字段中有一个复选框的行获取行值...但我可以似乎让它工作......到目前为止我已经尝试了
protected void Page_Load(object sender, EventArgs e)
{
Entities NW = new Entities();
var customers =
from c in NW.Customers
where (c.ContactName.StartsWith("Ma") || c.ContactName.StartsWith("An")
|| c.ContactName.StartsWith("T")
|| c.ContactName.StartsWith("V")
)
orderby c.ContactName ascending
select new
{
c.CustomerID,
c.ContactName,
c.CompanyName,
c.City
};
gv1.DataSource = customers.ToList();
gv1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in gv1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox chkRow = (row.Cells[0].FindControl("CB") as CheckBox);
if (chkRow.Checked)
{
Label1.Text = row.Cells[2].Text;
}
}
}
}
我已经完成了按钮点击事件,当它到达
时if(chkRow.Checked)
显示为null并跳过它..
我的标记是
<asp:GridView ID="gv1" runat="server">
<HeaderStyle BackColor="SkyBlue" />
<AlternatingRowStyle BackColor="Yellow" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CB" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
当我在运行后查看源代码时,复选框的命名方式与我给他们的ID“CB”的名称不同,附加的是运行时的源图片
我不确定我的错误是什么
答案 0 :(得分:0)
您的GridView
应该包含更多列,因为您在代码中引用了Cell[2]
。
您可能会尝试使用row
对象来查找您的控件:
CheckBox chkRow = (row.FindControl("CB") as CheckBox);