Avatar billede bjarkekr Nybegynder
30. oktober 2007 - 16:32 Der er 8 kommentarer og
1 løsning

Checkbox i repeater problem..

Jeg har en repeater med tjekbokse, jeg skal så sætte checked afhængigt af om data er 0 eller 1. Hvordan gøres det??

<ASP:CheckBox id="CheckBox1" runat="server" Checked='<%#DataBinder.Eval(Container.DataItem, "SYNLIG")%>'></ASP:CheckBox>

Dette virker i hvert fald ikke...
Avatar billede bjarkekr Nybegynder
31. oktober 2007 - 13:19 #1
Slet ingen svar?? Skrive bare så i ved at jeg stadig savner et svar..
Avatar billede neoman Novice
31. oktober 2007 - 16:54 #2
Checked='<%# Eval("MyBooleanVariable") %>' fungerer fint hos mig - hvad dækker "virker ikke" over ?
Avatar billede bjarkekr Nybegynder
31. oktober 2007 - 17:24 #3
Sådan kan jeg slet ikke skrive...

Skal lige sige at jeg koder delphi.net, men aspx filens .net kode skal skrives i c#.

Nu er jeg ikke på arbejdet nu, så kan ikke gengive mere kode før imorgen.

Det jeg gør er at ligge et database udtræk ned i et dataset, og derefter sætter jeg datasource på min repeater til mit dataset, og kalder databind på min repeater.

Så kan jeg i min aspx fil hente data fra mit dataset ud med <%#DataBinder.Eval(Container.DataItem, "SYNLIG")%>

Har ikke haft held med at skrive denne linje på nogen som helst andre måder... Der kommer fejl på siden hvis jeg skriver det anderledes.. Kan desvære ikke gengive fejlen her heller før imorgen.
Avatar billede neoman Novice
31. oktober 2007 - 17:30 #4
Ok - jeg har prøvet det på en tabel som jeg henter ind i en SqlDataSource som jeg så binder til en repeater, og det funker - i VisualStudio 2005, .net 2.
Avatar billede bjarkekr Nybegynder
01. november 2007 - 10:14 #5
ok, nu kommer der noget kode... Husk det er delphi.net..

//Her henter jeg data til repeateren, og binder det.. Virker fint..
procedure TWebLinks.fillRepeater;
var
  sql: string;
  firebird: FBconn;
  FBComm: FbCommand;
  FBReader: FbDataReader;
  sda: FbDataAdapter;
  ds: DataSet;
begin
sql := 'SELECT ' +
    '...'; //Har fjernet mit sql statement, da det er langt..

  firebird := FBConn.Create;
  firebird.connect(database); //Har en unit der lavet connection...
  sda := FbDataAdapter.Create;
  sda.SelectCommand := FbCommand.Create(sql, firebird.conn, firebird.trans);
  ds := DataSet.Create;
  sda.Fill(ds);
  ds.Tables[0].TableName := 'WEB_LINKS';
  Repeater1.DataSource := ds.Tables['WEB_LINKS'];
  Repeater1.DataBind;
end;

Feltet SYNLIG i databasen er et 1/0 felt, og jeg vil gerne have min tjekboks på siden til at være checked/not checked afhængig af data i SYNLIG feltet.

hvis jeg prøver med ovenstående kode: "Checked='<%# Eval("MyBooleanVariable") %>'"

kommer følgende fejl:  CS0103: Navnet 'Eval' findes ikke i klassen eller navneområdet 'ASP.links_ascx'

Denne linje har jeg tilgengæld stående ovenover: "<%#DataBinder.Eval(Container.DataItem, "RETTET")%>"

og det VIRKER... Det udskriver bare en string med en dato...
Avatar billede bjarkekr Nybegynder
02. november 2007 - 09:30 #6
Mangler stadig en løsning.. :(
Avatar billede bjarkekr Nybegynder
02. november 2007 - 14:28 #7
ok.. Jeg har fået det til at virke med ItemDataBound eventet på repeateren.

Her kommer min kode til andre med samme problem.



<%@ Control Language="c#" AutoEventWireup="false" Codebehind="links.pas" Inherits="links.TWebLinks"%>
<table width="100%" cellspacing="20">
    <tr>
        <td class="contentfull">
            <div class="headline">
                Links</div>
        <p>
            <ASP:Button id="btnNyTop" runat="server" text="Nyt link"></ASP:Button><br>

        </p>
    <br>
      <table width="100%" cellspacing="0">
    <ASP:Repeater id="Repeater1" runat="server">
<HeaderTemplate>
<tr>
<td>
Titel
</td>
<td>
Oprettet
</td>
<td>
Rettet
</td>
<td>
Link
</td>
<td>
Synlig
</td>
<td>
Rettet af
</td>
<td>
Handling
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td class="even">
<asp:textbox runat="Server" ID="idEven" visible="false"></asp:textbox>
<asp:textbox runat="Server" ID="titelEven" autopostback="True" OnTextChanged="txtTitelChanged"></asp:textbox>
</td>
<td class="even"><%#DataBinder.Eval(Container.DataItem, "L_OPRETTET", "{0:d}")%>
</td>
<td class="even"><%#DataBinder.Eval(Container.DataItem, "L_RETTET", "{0:d}")%>
</td>
<td class="even">
<asp:textbox runat="Server" ID="linkEven" autopostback="True" OnTextChanged="txtLinkChanged"></asp:textbox>
</td>
<td class="even">
<ASP:CheckBox id="chkSynligEven" runat="server" Checked="false" OnCheckedChanged="chkSynlig_CheckChanged" AutoPostBack="True"></ASP:CheckBox>
</td>
<td class="even"><asp:Literal ID="kaldenavnEven" runat="server"></asp:Literal>
</td>
<td class="even">
<asp:button ID="btnSletEven" runat="server" CommandName="comBtnSlet" Text="Slet"></asp:button>
</td>
</tr>
</ItemTemplate>
<alternatingitemtemplate>
<tr>
<td class="odd">
<asp:textbox runat="Server" ID="idOdd" visible="false"></asp:textbox>
<asp:textbox runat="Server" ID="titelOdd" autopostback="True" OnTextChanged="txtTitelChanged"></asp:textbox>
</td>
<td class="odd"><%#DataBinder.Eval(Container.DataItem, "L_OPRETTET", "{0:d}")%>
</td>
<td class="odd"><%#DataBinder.Eval(Container.DataItem, "L_RETTET", "{0:d}")%>
</td>
<td class="odd">
<asp:textbox runat="Server" ID="linkOdd" autopostback="True" OnTextChanged="txtLinkChanged"></asp:textbox>
</td>
<td class="odd">
<ASP:CheckBox id="chkSynligOdd" runat="server" Checked="false" OnCheckedChanged="chkSynlig_CheckChanged" AutoPostBack="True"></ASP:CheckBox>
</td>
<td class="odd"><asp:Literal ID="kaldenavnOdd" runat="server"></asp:Literal>
</td>
<td class="odd">
<asp:button ID="btnSletOdd" runat="server" CommandName="comBtnSlet" Text="Slet"></asp:button>
</td>
</tr>
</alternatingitemtemplate>
<FooterTemplate>

</FooterTemplate>
</ASP:Repeater>
</table>
    </td>
    </tr>
</table>










CODE BEHIND:



unit links;

interface

uses System.Data, System.Drawing, System.Web, System.Web.UI,
  System.Web.UI.WebControls, System.Web.UI.HtmlControls,
  FirebirdSql.Data.Firebird, Borland.Vcl.SysUtils;

type

  TWebLinks = class(System.Web.UI.UserControl)
{$REGION 'Designer Managed Code'}
    strict private
      procedure InitializeComponent;
    procedure btnNy_Click(sender: System.object; e: System.EventArgs);
    procedure Repeater1_ItemDataBound(sender: System.object; e: System.Web.UI.WebControls.RepeaterItemEventArgs);
    procedure Repeater1_ItemCommand(source: System.object; e: System.Web.UI.WebControls.RepeaterCommandEventArgs);
{$ENDREGION}
    strict private
      procedure Page_Load(sender: System.object; e: System.EventArgs);
    strict protected
    btnNyTop: System.Web.UI.WebControls.Button;
    chkSynligEven: System.Web.UI.WebControls.CheckBox;
    Repeater1: System.Web.UI.WebControls.Repeater;
    procedure OnInit(e: System.EventArgs); override;
  private
    procedure fillRepeater;
    procedure sletLink(id: string);
  public
    procedure chkSynlig_CheckChanged(sender: System.object; e: System.EventArgs);
    procedure txtLinkChanged(sender: System.object; e: System.EventArgs);
    procedure txtTitelChanged(sender: System.object; e: System.EventArgs);
  end;

implementation

uses
  unitDBConn, unitDeclare, default;


{$REGION 'Designer Managed Code'}
/// <summary>
/// Required method for Designer support -- do not modify
/// the contents of this method with the code editor.
/// </summary>


procedure TWebLinks.InitializeComponent;
begin
  Include(Self.btnNyTop.Click, Self.btnNy_Click);
  Include(Self.Repeater1.ItemDataBound, Self.Repeater1_ItemDataBound);
  Include(Self.Repeater1.ItemCommand, Self.Repeater1_ItemCommand);
  Include(Self.Load, Self.Page_Load);
end;
{$ENDREGION}

procedure TWebLinks.Page_Load(sender: System.object; e: System.EventArgs);
begin
  if (not IsPostBack) then
    fillRepeater;
end;

procedure TWebLinks.OnInit(e: System.EventArgs);
begin
  //
  // Required for Designer support
  //
  InitializeComponent;
  inherited OnInit(e);
end;


procedure TWebLinks.Repeater1_ItemDataBound(sender: System.object; e: System.Web.UI.WebControls.RepeaterItemEventArgs);
begin
  if ((e.Item.ItemType = ListItemType.Item)) then
  begin
    (e.Item.FindControl('idEven') as TextBox).Text := DataBinder.Eval(e.Item.DataItem, 'L_ID').ToString;
    (e.Item.FindControl('kaldenavnEven') as Literal).Text := DataBinder.Eval(e.Item.DataItem, 'KALDENAVN').ToString;
    if ((DataBinder.Eval(e.Item.DataItem, 'SYNLIG').ToString) = '1') then
      (e.Item.FindControl('chkSynligEven') as checkBox).Checked := true
    else
      (e.Item.FindControl('chkSynligEven') as checkBox).Checked := false;
    (e.Item.FindControl('linkEven') as TextBox).text := DataBinder.Eval(e.Item.DataItem, 'LINK').ToString;
    (e.Item.FindControl('titelEven') as TextBox).text := DataBinder.Eval(e.Item.DataItem, 'TITEL').ToString;
    (e.Item.FindControl('btnSletEven') as button).CommandArgument := DataBinder.Eval(e.Item.DataItem, 'L_ID').ToString;
  end;

  if ((e.Item.ItemType = ListItemType.AlternatingItem)) then
  begin
    (e.Item.FindControl('idOdd') as TextBox).Text := DataBinder.Eval(e.Item.DataItem, 'L_ID').ToString;
    (e.Item.FindControl('kaldenavnOdd') as Literal).Text := DataBinder.Eval(e.Item.DataItem, 'KALDENAVN').ToString;
    if ((DataBinder.Eval(e.Item.DataItem, 'SYNLIG').ToString) = '1') then
      (e.Item.FindControl('chkSynligOdd') as checkBox).Checked := true
    else
      (e.Item.FindControl('chkSynligOdd') as checkBox).Checked := false;
    (e.Item.FindControl('linkOdd') as TextBox).text := DataBinder.Eval(e.Item.DataItem, 'LINK').ToString;
    (e.Item.FindControl('titelOdd') as TextBox).text := DataBinder.Eval(e.Item.DataItem, 'TITEL').ToString;
    (e.Item.FindControl('btnSletOdd') as button).CommandArgument := DataBinder.Eval(e.Item.DataItem, 'L_ID').ToString;
  end;
end;

procedure TWebLinks.sletLink(id: string);
var
  sql: string;
  firebird: FBconn;
  FBComm: FbCommand;
begin
  sql := 'DELETE FROM WEB_LINKS ' +
    'WHERE ID=' + id;

  firebird := FBConn.Create;
  firebird.connect;
  FBComm := FbCommand.Create(sql, firebird.conn, firebird.trans);
  FBComm.ExecuteNonQuery();
  FBComm.Dispose;
  firebird.disconnect;

  Response.Redirect('?p=links');
end;

procedure TWebLinks.chkSynlig_CheckChanged(sender: System.object; e: System.EventArgs);
var
  sql: string;
  firebird: FBconn;
  FBComm: FbCommand;
  synlig, id: string;
  chkBox: CheckBox;
  chkCurrent: CheckBox;
  i: integer;
begin
  if (Sender is CheckBox) then
  begin
    if (Sender as checkBox).Checked then
      synlig := '1'
    else
      synlig := '0';

    chkBox := (Sender as checkBox);
    for I := 0 to Repeater1.Items.Count - 1 do
    begin
      chkCurrent := (Repeater1.Items[i].Findcontrol('chkSynligEven') as checkBox);
      if (chkBox.Equals(chkCurrent)) then
      begin
        id := (Repeater1.Items[i].Findcontrol('idEven') as textbox).Text;
        break;
      end
      else
        chkCurrent := (Repeater1.Items[i].Findcontrol('chkSynligOdd') as checkBox);
      if (chkBox.Equals(chkCurrent)) then
      begin
        id := (Repeater1.Items[i].Findcontrol('idOdd') as textbox).Text;
        break;
      end
    end;

    sql := 'UPDATE WEB_LINKS ' +
      'SET SYNLIG =  ' + synlig + ', ' +
      'BRUGER = ' + TWebDefault.userID + ' ' +
      'WHERE ID=' + id;

    firebird := FBConn.Create;
    firebird.connect();
    FBComm := FbCommand.Create(sql, firebird.conn, firebird.trans);
    FBComm.ExecuteNonQuery();
    FBComm.Dispose;
    firebird.disconnect;
  end;
end;

procedure TWebLinks.txtLinkChanged(sender: System.object; e: System.EventArgs);
var
  sql: string;
  firebird: FBconn;
  FBComm: FbCommand;
  link, id: string;
  txtBox: TextBox;
  txtCurrent: TextBox;
  i: integer;
begin
  if (Sender is TextBox) then
  begin
    txtBox := (Sender as TextBox);
    link := Server.HtmlEncode(txtBox.Text);
    for I := 0 to Repeater1.Items.Count - 1 do
    begin
      txtCurrent := (Repeater1.Items[i].Findcontrol('linkEven') as TextBox);
      if (txtBox.Equals(txtCurrent)) then
      begin
        id := (Repeater1.Items[i].Findcontrol('idEven') as textbox).Text;
        break;
      end
      else
        txtCurrent := (Repeater1.Items[i].Findcontrol('linkOdd') as TextBox);
      if (txtBox.Equals(txtCurrent)) then
      begin
        id := (Repeater1.Items[i].Findcontrol('idOdd') as textbox).Text;
        break;
      end
    end;

    sql := 'UPDATE WEB_LINKS ' +
      'SET LINK =  ''' + link + ''', ' +
      'BRUGER = ' + TWebDefault.userID + ' ' +
      'WHERE ID=' + id;

    firebird := FBConn.Create;
    firebird.connect();
    FBComm := FbCommand.Create(sql, firebird.conn, firebird.trans);
    FBComm.ExecuteNonQuery();
    FBComm.Dispose;
    firebird.disconnect;
  end;
end;

procedure TWebLinks.txtTitelChanged(sender: TObject; e: System.EventArgs);
var
  sql: string;
  firebird: FBconn;
  FBComm: FbCommand;
  titel, id: string;
  txtBox: TextBox;
  txtCurrent: TextBox;
  i: integer;
begin
  if (Sender is TextBox) then
  begin
    txtBox := (Sender as TextBox);
    titel := Server.HtmlEncode(txtBox.Text);
    for I := 0 to Repeater1.Items.Count - 1 do
    begin
      txtCurrent := (Repeater1.Items[i].Findcontrol('titelEven') as TextBox);
      if (txtBox.Equals(txtCurrent)) then
      begin
        id := (Repeater1.Items[i].Findcontrol('idEven') as textbox).Text;
        break;
      end
      else
        txtCurrent := (Repeater1.Items[i].Findcontrol('titelOdd') as TextBox);
      if (txtBox.Equals(txtCurrent)) then
      begin
        id := (Repeater1.Items[i].Findcontrol('idOdd') as textbox).Text;
        break;
      end
    end;

    sql := 'UPDATE WEB_LINKS ' +
      'SET TITEL =  ''' + titel + ''', ' +
      'BRUGER = ' + TWebDefault.userID + ' ' +
      'WHERE ID=' + id;

    firebird := FBConn.Create;
    firebird.connect();
    FBComm := FbCommand.Create(sql, firebird.conn, firebird.trans);
    FBComm.ExecuteNonQuery();
    FBComm.Dispose;
    firebird.disconnect;
  end;
end;


procedure TWebLinks.fillRepeater;
var
  sql: string;
  firebird: FBconn;
  sda: FbDataAdapter;
  ds: DataSet;
begin
  sql := 'SELECT ' +
    'WEB_LINKS.ID AS L_ID, ' +
    'WEB_LINKS.OPRETTET AS L_OPRETTET, ' +
    'WEB_LINKS.RETTET AS L_RETTET, ' +
    'TITEL, ' +
    'LINK, ' +
    'SYNLIG, ' +
    'WEB_USERS.KALDENAVN AS KALDENAVN ' +
    'FROM WEB_LINKS ' +
    'LEFT JOIN WEB_USERS ON (WEB_USERS.ID = WEB_LINKS.BRUGER)';

  firebird := FBConn.Create;
  firebird.connect();
  sda := FbDataAdapter.Create;
  sda.SelectCommand := FbCommand.Create(sql, firebird.conn, firebird.trans);
  ds := DataSet.Create;
  sda.Fill(ds);
  ds.Tables[0].TableName := 'WEB_LINKS';
  Repeater1.DataSource := ds.Tables['WEB_LINKS'];
  Repeater1.DataBind;
end;

procedure TWebLinks.Repeater1_ItemCommand(source: System.object; e: System.Web.UI.WebControls.RepeaterCommandEventArgs);
begin
  if (e.CommandName.ToString = 'comBtnSlet') then
    sletLink(e.CommandArgument.ToString);
end;

procedure TWebLinks.btnNy_Click(sender: System.object; e: System.EventArgs);
var
  sql: string;
  firebird: FBconn;
  FBComm: FbCommand;
begin
  sql := 'INSERT INTO WEB_LINKS (SYNLIG, BRUGER) ' +
    'VALUES (0, ' + TWebDefault.userID + ')';

  firebird := FBConn.Create;
  firebird.connect();
  FBComm := FbCommand.Create(sql, firebird.conn, firebird.trans);
  FBComm.ExecuteNonQuery();
  FBComm.Dispose;
  firebird.disconnect;

  Response.Redirect('?p=links');
end;

end.


BEMÆRK AT DET ER DELPHI.NET MED EN FIREBIRD DATABASE!!!
Avatar billede neoman Novice
03. november 2007 - 11:16 #8
godt det lykkedes, jeg gik AFK i nogle dage:-(
Avatar billede bjarkekr Nybegynder
03. november 2007 - 20:55 #9
Det er bare iorden.. :) Kan ikke forvente at folk ligefrem står på spring for at hjælpe.. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester