Hello其他程序员,
现在我有一个网页,通过网格视图显示数据表。这很好用。我还在视图的开头插入了一列复选框。这也很好。但是当我尝试从选中相应复选框的行中的单元格中检索信息时,我得到一个空字符串。
以下是与此问题相关的代码部分:
的.aspx:
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
return;
}
else
{
}
//server connections and whatnot//
OleDbCommand c0 = new OleDbCommand(sql0, myConnection);
myAdapter.SelectCommand = c0;
DataSet ds0 = new DataSet("Contacts");
myAdapter.Fill(ds0);
DataTable dt0 = new DataTable();
dt0 = ds0.Tables["Contacts"];
DataView view = new DataView();
view.Table = dt0;
GV0.DataSource = view;
GV0.DataBind();
myConnection.Close();
}
的.cs:
/**
* WHY U NO WORK?!
*/
public void Dedupe(Object o, EventArgs e)
{
String output = "start ";
foreach (GridViewRow row in GV0.Rows)
{
CheckBox cb = (CheckBox)row.FindControl("CheckBox1");
if (cb.Checked == true)
{
output += row.Cells[1];
}
}
Label1.Text = output;
}
非常感谢任何帮助。
干杯
答案 0 :(得分:0)
只是想一想,但在foreach循环中,您可能需要检查正在循环的当前行的RowType属性,并确保将其设置为DataRow。或者您可以使用LINQ语句仅返回具有RowType == DataRow的行并循环遍历该行。
更新以下是我的意思的快速示例。但是在查看代码时,看来你的gridview的第二个单元格中没有任何文本,实际上你的gridview只有一个基于你提供的代码的单元格。
public void Dedupe(Object o, EventArgs e)
{
String output = "start ";
IEnumerable<GridViewRow> rows = from r in GV0.Rows
where r.RowType == DataControlRowType.DataRow
select r;
foreach (GridViewRow row in rows)
{
CheckBox cb = (CheckBox)row.FindControl("CheckBox1");
if (cb.Checked)
{
output += row.Cells[1];
}
}
Label1.Text = output;
}