Hur gör man för att binda en datakälla till en usercontrol? Hmm... Nu blir jag osäker på ifall: Tack för hjälpen men nu är det så att jag ville att det skulle funka i windows forms. Ha! Supermiss =) Det är typ en datagrid/datalist Okey, testa någonting sånt här då:binda data till usercontrol
tex. Usercontrolen har en labeloch för varje rad som finns i datakällan skall en rad läggas till och co labeln skall få den texten som finns i data källan. (Typ som en datalist i asp.net)
man skall bara behöva skriva usercontrol.Datasource = db.GetData();
Någon som har någon ide?Sv: binda data till usercontrol
1. Labeln skall innehålla flera rader
2. Det skall finnas flera Labels i Usercontrollen
3. Det skall finnas flera UserControls.
... Men om jag får gissa lite så är det nummer 2 som du vill ha:
labelrepeater.ascx:
<%@ Control Language="c#" AutoEventWireup="false"
Codebehind="labelrepeater.ascx.cs" Inherits="tester.labelrepeater"
TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<asp:Repeater id="Repeater1" runat="server">
<HeaderTemplate><table></HeaderTemplate>
<ItemTemplate>
<tr><td>
<asp:Label Runat="server" ID="Label1">
<%# DataBinder.Eval(Container.DataItem, "Namn")%>
</asp:Label>
</td></tr>
</ItemTemplate>
<FooterTemplate></table></FooterTemplate>
</asp:Repeater>
labelrepeater.ascx.cs
namespace tester {
using System;
using System.Web.UI.WebControls;
public class labelrepeater : System.Web.UI.UserControl {
protected Repeater Repeater1 = new Repeater();
public object DataSource {
get { return Repeater1.DataSource; }
set { Repeater1.DataSource = value; }
}
override protected void OnInit(EventArgs e) {
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent() {}
}
}
WebForm1.aspx
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs"
AutoEventWireup="false" Inherits="tester.WebForm1" %>
<%@ Register TagPrefix="uc1" TagName="labelrepeater"
Src="labelrepeater.ascx" %>
<HTML>
<body>
<uc1:labelrepeater id="Labelrepeater1" runat="server"></uc1:labelrepeater>
</body>
</HTML>
WebForm1.aspx.cs
using System;
using System.Collections;
namespace tester {
public class WebForm1 : System.Web.UI.Page {
public labelrepeater Labelrepeater1 = new labelrepeater();
private void Page_Load(object sender, System.EventArgs e) {
// Init lite data istället för hämta från databas
ArrayList list = new ArrayList();
list.Add( new Item("Stockholm") );
list.Add( new Item("Göteborg" ) );
list.Add( new Item("Malmö" ) );
list.Add( new Item("Sundsvall") );
Labelrepeater1.DataSource = list;
DataBind();
}
override protected void OnInit(EventArgs e) {
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent() {
this.Load += new System.EventHandler(this.Page_Load);
}
}
public class Item {
private string namn;
public string Namn { get { return namn; } }
public Item(string namn){
this.namn = namn;
}
}
}
Hoppas det hjäper
// MvH Björne
Sv:binda data till usercontrol
Windows forms har ju ingen Repeater.Sv: binda data till usercontrol
Sorry. Har inte kommit igång med WinForms-applikationer riktigt.
Hmm... Hur var det du har tänkt dig att den där kontrollen skulle fungera?
Skulle den lägga till en label för varje rad, eller skulle den bara lägga till en ny rad i samma label?
Skall kontrollen expandera etc?
Eller är det typ en DataGrid som du vill ha?
// Med ödmjuka hälsningar BjörneSv:binda data till usercontrol
Tex. i databasen fins:
1 kalle
2 nisse
3 olle
Då skall det bildas 3 st lablar där den första har texten kalle och den tredje har texten olle.Sv: binda data till usercontrol
Lägg till följande funktion i din UserControl
public void ConsumeDataTable(DataTable table, string columnName) {
int x = 10;
int y = 10;
foreach ( DataRow dr in table.Rows ) {
Label l = new Label();
l.Text = dr[columnName].ToString();
l.Location = new Point(x,y);
this.Controls.Add(l);
y += l.Height;
}
}
och sen kallar du på den från ditt Form med:
LabelRepeater lr = new LabelRepeater(); // LabelRepeater är din UserControl
this.Controls.Add(lr);
lr.Location = new Point(1,1);
lr.ConsumeDataTable(table, "name");
Kan det vara en start?
// MvH Björne