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.
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...
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!!!