1

こんにちは、仲間のプログラマー、

現在、グリッドビューを介してデータテーブルを表示する Web ページがあります。これはうまくいきます。また、ビューの先頭にチェックボックスの列を挿入しました。これもうまくいきます。しかし、それぞれのチェックボックスが選択されている行のセルから情報を取得しようとすると、空の文字列が返されます。

以下は、この問題に関連するコードの一部です。

.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 を持つ行のみを戻し、それをループすることもできます。

更新 これは、私が意味したことの簡単なサンプルです。しかし、コードを確認すると、グリッドビューの 2 番目のセルにテキストがあるようには見えません。実際、グリッドビューには、提供したコードに基づくセルが 1 つしかありません。

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 に答える