3

特定のドロップダウンリスト項目が選択されている場合にのみテキストボックスを編集可能にしたいグリッドビューがあります。RowDataBound で値を取得し、編集する必要があるかどうかを判断しますが、.Visible 属性が期待どおりに機能しません。私のサンプル データを使用すると、1 番目と 2 番目の行には列にテキスト ボックスがなく、3 番目にはテキスト ボックスがあり、4 番目には再びありません。どんな助けでも大歓迎です。

        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        Control ctrl = e.Row.FindControl("ddlPriceTypeCode");

        if (ctrl != null)
        {
            DropDownList ddl = (DropDownList)ctrl;
            if (ddl.SelectedValue == "UPRC-" || ddl.SelectedValue == "PLEV-0" || ddl.SelectedValue == "PLEV-1" || ddl.SelectedValue == "PLEV-2" || ddl.SelectedValue == "PLEV-3" || ddl.SelectedValue == "PLEV-4" || ddl.SelectedValue == "PLEV-5" || ddl.SelectedValue == "PLEV-6" || ddl.SelectedValue == "PLEV-7")
            {
                //GridView1.Columns[4].Visible = true;
            }
            else 
            { 
                //GridView1.Columns[4].Visible = false;
            }
        }
    }
4

2 に答える 2

2

このようにして、列全体を非表示/表示します。はすべてのRowDataBound行に対して実行されるため、列の可視性は最後の行のドロップダウン リストの値によって決まります。

次のように、TextBox のみを非表示/表示する場合に行う必要があること:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    Control ctrl = e.Row.FindControl("ddlPriceTypeCode");
    TextBot txt = (TextBox)e.Row.FindControl("txtID");

    if (ctrl != null)
    {
        DropDownList ddl = (DropDownList)ctrl;
        if (ddl.SelectedValue == "UPRC-" || ddl.SelectedValue == "PLEV-0" || ddl.SelectedValue == "PLEV-1" || ddl.SelectedValue == "PLEV-2" || ddl.SelectedValue == "PLEV-3" || ddl.SelectedValue == "PLEV-4" || ddl.SelectedValue == "PLEV-5" || ddl.SelectedValue == "PLEV-6" || ddl.SelectedValue == "PLEV-7")
            txt.Visible = true;
        else 
            txt.Visible = false;
    }
}

明らかに、「txtID」は、非表示/表示する TextBox の ID です。

于 2014-12-15T18:54:52.227 に答える
0

私の知る限り、あなたはこのイベントで選択された項目をチェックしていません。このイベントは、データ ソース プロパティがコントロールにアタッチされたときに発生します。これは、selectionChanged イベントで確認する必要があります。

于 2014-12-15T18:41:50.200 に答える