Hu gör man igentligen för att komma åt en varibel från huvudsidan från en .ascx control? Eller åt andra hållet också för den delen? Du skapar bara en public property i din kontrol. Ja det verkar vara det jag letar efter. har inte hunnit testa ännu. Tack! Nu har jag ett praktiskt problem på samma ämne. Blir inte riktigt klok på hur jag ska göra. I min kontroll Header.ascx har jag en dropdownlist fylld med kategorier som auto postar formuläret tillbaka till samma sida. Har försökt att förstå din beskrivning Johan men kan inte förstå riktigt än. Hej, .aspx Om du inte vill separera det. Tack Johan och Toska! All hjälp är mycket uppskattad. Ska försöka bygga ett helt e-handel system och har bara 10 dagar kvar... Yeah, nu lyckades jag iaf få tag på querystringen i kontrollen till slut. Den skulle ju ligga i Page_Load funktione för att det skulle funka. Page.Parent problemet får vila lite. Men dety vore ju trevligt att förstå det tillslut så jag lämnar tråden öppen ett tag till.Variabel räckvidd - control
Sv: Variabel räckvidd - control
<code>
private string något;
public string Något
{
get { return ( this.något ); }
set { this.något = value; }
}
</code>
då kan du även sätta den när du skriver taggen på ASPX sidan.
<min:någonstans id="Foo" något="Haha"....>
För att komma åt den gör du detta lättast via CodeBehind.
<code>
Foo.Något = "ny text";
string text = Foo.Något;
</code>
För att komma åt data från din ASPX sida kan du gå på Page.Parent som ger dig den kontroll som du skapades i.
Hoppas detta var det du var ute efter.
Mvh JohanSv: Variabel räckvidd - control
Sv: Variabel räckvidd - control
Dropdownlist i Header.ascx
<code>
Kategori: <ASP:DropDownList id=ddlCategory runat=server AutoPostBack="true">
</ASP:DropDownList>
</code>
Min huvudsida ser ut så här,
<code>
<%@ Register TagPrefix="Junkyard" TagName="Header" Src="Header.ascx" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<script Language="c#" runat="Server">
private void Page_Load(object sender, System.EventArgs e)
{
if (IsPostBack)
{
string strConnection = ConfigurationSettings.AppSettings["EnConnectionString"];
string strSQL = "Select id,name from tbl_product WHERE is_deleted=false AND category_id=" + ddlCategory.SelectedItem.Value + " ORDER BY name";
OleDbConnection objConnection = new OleDbConnection(strConnection);
OleDbCommand objCommand = new OleDbCommand(strSQL,objConnection);
objConnection.Open();
Product.DataSource = objCommand.ExecuteReader(CommandBehavior.CloseConnection);
Product.DataBind();
}
}
</SCRIPT>
<html>
<body>
<form runat="server">
<asp:DataGrid id="Product" runat="server"></asp:DataGrid>
</form>
</body>
</html>
</code>
Problemet är att jag inte kan komma åt vad som är i dropdownlisten.
<code>ddlCategory.SelectedItem.Value</code> fungerar inte.
Hur kan jag göra? Mycket tacksam för svar.
mvh JeppeSv: Variabel räckvidd - control
Vad är tex Foo?
<code>
Foo.Något = "ny text";
string text = Foo.Något;
</code>
Postar min Header.asc sida så långt som jag kommit:
<code>
<%@ Control Language="C#" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<SCRIPT runat="server">
OleDbConnection objConnection;
OleDbCommand objCommand;
OleDbDataReader objDataReader;
String strSQL;
private string selectedCategory;
//PROTOTYP - Hur kan jag komma åt denna publika propertyn från Store.aspx?
//Inte helt klart hur jag kan sätta den här heller men borde funka från Index_Changed metoden..
public string SelectedCategory
{
get { return ( this.selectedCategory ); }
set { this.selectedCategory = value; }
}
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
string objCommand = "Select id,category from tbl_category WHERE is_deleted=false AND shop_id = 1 ORDER BY category";
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(objCommand, new OleDbConnectionConfigurationSettings.AppSettings["EnConnectionString"]));
DataSet dataSet = new DataSet( );
dataAdapter.Fill(dataSet,"category");
DataTable dataTable = dataSet.Tables[0];
ddlCategory.DataSource = dataTable.DefaultView;
ddlCategory.DataTextField = "category";
ddlCategory.DataValueField="id";
ddlCategory.DataBind();
}
else
{
//Funkar att få ut rätt val här men inte på Huvudsidan..
Response.Write("Testar + " + ddlCategory.SelectedItem.Value);
}
}
void Index_Changed(Object sender, EventArgs e)
{
selectedCategory = ddlCategory.SelectedItem.Value;
Label1.Text = "Du valde " +ddlCategory.SelectedItem.Text +
" Med värde " + ddlCategory.SelectedItem.Value +
".";
}
</SCRIPT>
Kategori: <ASP:DropDownList id=ddlCategory runat=server AutoPostBack="true" OnSelectedIndexChanged="Index_Changed">
</ASP:DropDownList>
</code>Sv: Variabel räckvidd - control
Foo använder man som en liten notation för att förklara att något skall vara där.
Ex hade jag kunnat skriva.
<code>
string name = null;
public string Name
{
get { return ( this.name ); }
}
</code>
Eller för att visa att ett exempel kan vara vad som o inte bara Name kan du nyttja Foo
som typ är ett anonymt namn för vad som. Ungefär som när man pratar försvunna folk vars namn man inte k'nner till, då kallar man dem oftast för John Doe.
<code>
string foo = null;
public string Foo
{
get { return ( this.foo ); }
}
</code>
Är med andra ord bara ett syntax exempel där Foo kan vara vad som...
<code>
Foo.Något = "ny text";
</code>
Där menar jag att Foo är namnet på din kontroll och Något är en variabel ex Name.
Kunde satt Foo2 där, men kände att det kanske skuille bli mer svårtläst då.
Skall till Bergsala AB (Nintendo) på kundbesök nu, så jag hinner inte ta en titt på din kod ovan... Om du inte löst det till eftermiddagen så kanske (om jag hinner tillbaka till jobbet) ta en titt på det.
Mvh JohanSv: Variabel räckvidd - control
<code>
<%@ Register TagPrefix="Junkyard" TagName="Header" Src="Header.ascx" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<script Language="c#" runat="Server">
...
string strSQL = "Select id,name from tbl_product WHERE is_deleted=false AND category_id=" + ucHeader.SelectedCategory + " ORDER BY name";
...
</script>
<html>
<body>
<form runat="server">
<asp:DataGrid id="Product" runat="server"></asp:DataGrid>
<Junkyard:Header id="ucHeader" runat="server" />
</form>
</body>
</html>
</code>
.ascx
<code>
<script runat="server">
...
public string SelectedCategory
{
get {return (ddlCategory.SelectedValue); }
}
...
</script>
<asp:DropDownList id=ddlCategory runat=server AutoPostBack="true" OnSelectedIndexChanged="Index_Changed" />
</code>Sv: Variabel räckvidd - control
<code>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<script Language="c#" runat="Server">
if(!IsPostBack)
{
BindDDL();
BindDG();
}
private void BindDDL()
{
string objCommand = "Select id,category from tbl_category WHERE is_deleted = false AND shop_id = 1 ORDER BY category";
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(objCommand, new OleDbConnectionConfigurationSettings.AppSettings["EnConnectionString"]));
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet,"category");
DataTable dataTable = dataSet.Tables[0];
ddlCategory.DataSource = dataTable.DefaultView;
ddlCategory.DataTextField = "category";
ddlCategory.DataValueField = "id";
ddlCategory.DataBind();
}
private void BindDG()
{
string strConnection = ConfigurationSettings.AppSettings["EnConnectionString"];
string strSQL = "Select id,name from tbl_product WHERE is_deleted=false AND category_id=" + ddlCategory.SelectedValue + " ORDER BY name";
OleDbConnection objConnection = new OleDbConnection(strConnection);
OleDbCommand objCommand = new OleDbCommand(strSQL,objConnection);
objConnection.Open();
Product.DataSource = objCommand.ExecuteReader(CommandBehavior.CloseConnection);
Product.DataBind();
}
private void Index_Changed(Object sender, EventArgs e)
{
BindDG();
Label1.Text = "Du valde " +ddlCategory.SelectedItem.Text +
" Med värde " + ddlCategory.SelectedItem.Value +
".";
}
</script>
<html>
<body>
<form runat="server">
<asp:DataGrid id="Product" runat="server"></asp:DataGrid>
Kategori: <asp:DropDownList id=ddlCategory runat=server AutoPostBack="true" OnSelectedIndexChanged="Index_Changed" />
<asp:label id="Label1" runat="server" />
</form>
</body>
</html>
</code>Sv: Variabel räckvidd - control
Jag blir verkligen inte klok på hur user kontroller fungerar, så därför löste jag det med att lägga navigerings listorna på min huvudsida tills vidare. Ska prova prova igen senare. Just nu är det att komma åt variabel från en huvud sidan till user controll som jag vill lösa.
Har en variable på huvudsidan som innehåller kommer från en querystring. Det verkar förresten som att man måste hämta querystrings i Page_Load funktionen. Stämmer det?
<code>
public string strSection = "";
private void Page_Load(object sender, System.EventArgs e)
{
strSection = Request.QueryString["section"];
</code>
När jag sedan försöker hämta variablen från min .asxc sida har jag försökt med
<code>
string strSection = Page.Parent.strSection;
</code>
Har också försökt att hämta querystringen på nytt i kontrollen men det fungerar inte alls?
Alltså hur kommer man åt variabler från huvudsidan????
mvh JeppeSv: Variabel räckvidd - control
ha de!
/J