2009-03-24 5 views
2

Я могу найти пару взломанных способов сделать это, но не очень аккуратный способ «.NET».custom templatefield using ASP.NET Gridview

Я показываю таблицу данных с помощью Gridview ... один из столбцов предназначен для отображения состояния логической переменной. Спецификация, которую я пытаюсь выполнить, состоит в том, чтобы в столбце, представляющем эту переменную, нажать кнопку «Вкл.» И «Отключить» .... и нажатие кнопки «Вкл.» Изменит переменную на 1 в моей базе данных ... и нажатие «ВЫКЛ» изменится он до 0 и т. д.

Обычно я имею дело с php, но я предполагаю, что это можно как-то сделать чистым способом, используя шаблонное поле ... но ... я не знаю, как, m ask :)

любые советы будут оценены. Andrew

ответ

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 
+0

должен был отменить ответ. Запишите из-за ошибок String ... странно ... но другие тогда сработали .... Я не знал, как передавать переменные в codebehind ... так что commandarguement был очень полезно, спасибо. – Andrew

+0

Есть ли специальный способ привязки данных к Gridview/базе данных? – Andrew

+0

@Andrew - я изменил пример, чтобы сделать это, или вы можете перестроить сетку. –

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)); 
      } 
     } 
+0

Я думаю, что это должно быть привязка данных <%# $> синтаксис. Не Response.Write <%= %>. –

+0

спасибо, фактически отправлен рано по ошибке, прежде чем завершить мой ответ (и проверить ошибки!). – Richard

+0

спасибо, .. использовали некоторые из этого кода, .., .. Response.Write дал мне ошибки, хотя я просто взял его и работал нормально. – Andrew

0

Page

<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); 
} 
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> 

На изображении OnClick случае вы должны обновить базу данных, по какой логике вы должны оценить.

Смежные вопросы