1

with: SELECT ID、名前、Flag1 FROM テーブル

Flag1 フィールドのビット値に基づいて、単一の列に Button または CheckBox を動的に表示することは可能ですか?

言い換えると、Flag1 = true の場合、チェックボックスをオンにして読み取り専用として表示します。Flag1 = false の場合、クリック イベントでボタンを表示し、行の ID をハンドラーに渡します。

変更するには、どのイベントをフックする必要がありますか? データバインド? .aspx または .cs でチェックボックス/ボタンを設定するにはどうすればよいですか? 通常、Gridviews で ItemTemplates を使用します...

            <asp:TemplateField HeaderText="Under Warranty" >
            <ItemTemplate>
                <asp:Button ID="WButton" runat="server" CommandName="AddWarrantyTrackerItem" CommandArgument = "<%# (Container.DataItemIndex) %>" Text="Track Warranty" Visible="false" />
                <asp:CheckBox ID="WFlag" runat="server" Visible="false" readonly="true" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Depot" >
            <ItemTemplate>
                <asp:Button ID="DButton" runat="server" CommandName="AddDepotTrackerItem" CommandArgument = "<%# (Container.DataItemIndex) %>" Text="Track Depot" Visible="false" />
                <asp:CheckBox ID="DFlag" runat="server" Visible="false"  readonly="true" />
            </ItemTemplate>
        </asp:TemplateField>

分離コード:

    protected void gridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        CheckBox WFlag = (CheckBox)e.Row.FindControl("WFlag");
        Button WButton = (Button)e.Row.FindControl("WButton");
        CheckBox DFlag = (CheckBox)e.Row.FindControl("DFlag");
        Button DButton = (Button)e.Row.FindControl("DButton");
        var record = (System.Data.Common.DbDataRecord)e.Row.DataItem;
        bool flagW = (bool)record.GetValue(14);
        bool flagD = (bool)record.GetValue(15);
        int reqnum = (int)record.GetValue(0);
        if (flagW == false) 
        {
            WButton.Visible = true;
            WFlag.Visible = false;
        }
        else
        {
            WButton.Visible = false;
            WFlag.Visible = true;
            WFlag.Checked = true;
        }
        if (flagD == false)   
        {
            DButton.Visible = true;
            DFlag.Visible = false;
        }
        else
        {
            DButton.Visible = false;
            DFlag.Visible = true;
            DFlag.Checked = true;
        }
    }
}
4

1 に答える 1