1

ASP.NETアプリケーションには、GridViewがあります。このGridViewの特定のフィールドに対して、DropDownListを使用してEditItemTemplateを追加しました。ただし、フィールドの値が「X」の場合は、DropDownListではなくラベルのみを表示したいと思います。では、プログラムでフィールド値を確認してから、表示するコントロールを決定するにはどうすればよいですか?

これが私のEditItemTemplateです:

<EditItemTemplate>

<asp:DropDownList ID="DropDownListLevel_ID" runat="server"
    DataSourceID="ODSTechLvl" DataTextField="Level_Name"
    DataValueField="Level_ID" SelectedValue='<%# Bind("Level_ID", "{0}") %>'>
</asp:DropDownList>

</EditItemTemplate>

Level_IDの値が「X」の場合、次を使用します。

<asp:Label ID="LabelLevel_ID" runat="server" Text='<%# Bind("Level_ID") %>'></asp:Label>

DropDownListの代わりに。

DropDownListの前にifステートメントを埋め込んでEval( "Level_ID")をチェックしようとしましたが、うまくいかないようです。何かご意見は?

4

2 に答える 2

1

これを試して:

<EditItemTemplate>

<asp:DropDownList ID="DropDownListLevel_ID" runat="server"
    DataSourceID="ODSTechLvl" DataTextField="Level_Name"
    DataValueField="Level_ID" SelectedValue='<%# Bind("Level_ID", "{0}") %>'
    Visible='<%# Eval("Level_ID") != "X" %>'>
</asp:DropDownList>

<asp:Label ID="LabelLevel_ID" runat="server" Text='<%# Bind("Level_ID") %>'
    Visible='<%# Eval("Level_ID") == "X" %>'></asp:Label>

</EditItemTemplate>
于 2010-07-30T20:22:00.487 に答える
0

これは、ASP.Net で機能するものです。

RowDataBound イベントを作成して、ラベルまたは DropDownList を非表示にすることができます

<asp:GridView id="thingsGrid" runat="server" OnRowDataBound="thingsGrid_RowDataBound"

... > ...

そしてあなたのコードビハインドで:

protected void thingsGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            var boundData = e.Row.DataItem;
            ...
            if (boundDataMeetsCondition)
            {
                e.Row.Cells[4].FindControl("editThingDropDownList").Visible = false;
                e.Row.Cells[4].FindControl("editThingLabel").Visible = true;//*
            }
            else
            {
                ...    
            }
        }
}

*これはセル インデックスをハード コードするため、理想的とは言えません。また、コントロールの ID は実行時までチェックされない文字列です。asp.net mvc には、この問題を解決するもっと洗練された方法があります。

OnRowDataBound は、グリッド、ページ メソッド、およびアプリケーション全体へのフル アクセスを提供するハンマーです。非常に単純なシナリオでは、分離コードを使用せずにインラインで実行することもできます。

<asp:Label ID="Label1" runat="server" Visible='<%# Convert.ToBoolean(Eval("BooleanPropertyInData"))%>' Text='<%# Eval("PropertyInData") %>'></asp:Label>                           

また

<asp:Label ID="Label1" runat="server" Visible='<%# Eval("PropertyInData").ToString()=="specialValue"%>' Text='<%# Eval("PropertyInData") %>'></asp:Label>  

最初のインライン アプローチでは、データ ソースはそのようなプロパティを公開する必要があり、2 番目のインライン アプローチでは、specialValue ビジネス ロジックをプレゼンテーションにハード コーディングします。これも醜く、保守性の問題につながります。

于 2010-07-30T20:11:45.843 に答える