使用ASP.NET Gridview自定义模板字段

时间:2009-03-24 20:50:20

标签: .net asp.net gridview

我可以弄清楚这样做的几种方式,但是没有真正整洁的“.NET”方式。

我正在使用Gridview显示数据表...其中一列专门用于显示布尔变量的状态。我想要遇到的规范是在代表这个变量的列中有一个“On”和“Off”按钮....然后单击ON会在我的数据库中将变量更改为1,然后单击OFF将更改它等于0等。

我通常会处理php,但我猜这可以使用模板字段以干净的方式完成...但是,...我不知道怎么回事,这就是为什么我要问:)

任何提示将不胜感激。 安德鲁

4 个答案:

答案 0 :(得分:4)

这样的事情应该得到你想要的东西。

ASPX方面:

<templateField>
  <itemtemplate>
    <asp:button runat="server" id="myButton" Text='<%# Response.Write(IIF(Eval("MyBool"),"Off", "On")) %>' CommandName='<%# Response.Write(IIF(Eval("MyBool"),"TurnOff", "TurnOn")) %>' CommandArgument='<%# Eval("MyRowIdentifier") %>' />
  </itemTemplate>
</templateField>
代码背后的代码:

protected sub Row_itemCommand (ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles MyGrid.RowCommand
   Dim btn As Button =e.Item.FindControl("myButton")
   Select case e.CommandName 
      case "TurnOff"
        MyTurnOffFunction(e.CommandArgument)
        btn.Text = "Off"
        btn.CommandName="TurnOn"
      Case "TurnOn"
        MyTurnOnFunction(e.CommandArgument)
        btn.Text = "On"
        btn.CommandName="TurnOff"
    End Select

End Sub

答案 1 :(得分:1)

你对模板字段是正确的:

  <asp:GridView ID="GridView1" runat="server" onrowcommand="GridView1_RowCommand">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Image ID="img_on" Visible='<%# (bool) Eval("FieldBoolean") %>' runat="server" ImageUrl="GreenLight.jpg" />
                <asp:Image ID="img_off" Visible='<%# !(bool) Eval("FieldBoolean") %>' runat="server" ImageUrl="RedLight.jpg" />
            </ItemTemplate>
            <EditItemTemplate>
             <asp:button ID="btn_switch" runat="server" Text='<%# Response.Write( (bool) Eval("FieldBoolean") ?  "Off" : "On")) %>' CommandName="switch"
              CommandArgument='<%# Eval("FieldBoolean") %>' />

            </EditItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>




protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandArgument == "switch")
            {
                UpdateValue(!bool.Parse((string) e.CommandArgument));
            }
        }

答案 2 :(得分:1)

我认为你可以这样做:

<Columns>
  <asp:TemplateField>
    <ItemTemplate>
      <asp:ImageButton ID="btnEliminar" runat="server" 
         ImageUrl=<%# ((bool) Eval("condition"))? "yes.png":"no.png" %>
         OnClick="btnEliminar_Click"  
      />
    </ItemTemplate>
  </asp:TemplateField>
</columns>

在图像O​​nClick事件上,您应根据必须评估的逻辑更新数据库。

答案 3 :(得分:0)

网页

<ItemTemplate>
    <asp:ImageButton id="OnButton" runat="server" OnClick="ToggleButtons" visible="True"/>
    <asp:ImageButton id="OffButton" runat="server"OnClick="ToggleButtons" visible="False" />
</ItemTemplate>

代码背后

protected void ToggleButtons(object sender, EventArgs e)
{
    if (OnButton.visible) 
    {
        OnButton.visible = false;
        OnButton.visible = true;
    } else {
        OnButton.visible = true;
        OnButton.visible = false;
    }
    DoWork(OnButton.visible);
}