1

各位程序员好,

现在我有一个通过网格视图显示数据表的网页。这工作正常。我还在视图的开头插入了一列复选框。这也很好。但是,当我尝试从选中相应复选框的行中的单元格中检索信息时,我得到一个空字符串。

以下是与此问题相关的代码部分:

.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;
    }

任何帮助将不胜感激。

干杯

4

1 回答 1

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;
}
于 2013-01-23T21:06:51.907 回答