jag försöker hämta data från databasen och göra en SqlDataSource programatiskt. Detta vill sej dock inte. Anledningen till att jag gör detta i code behind är för att det måste köras ett par andra metoder innan datasourcen körs. Jag vet inte riktigt varför du vill göra det på det viset istället för att bara använda en SqlConnection och SqlCommand som i mitt exempel nedan. Men om du ska göra sådär så gissar jag på felmeddelandet att du måste lägga till DataSourcen i sidan innan du databinder, typ this.Children.Add(sqlPreviewAd). Dessutom gissar jag på att du kan hoppa över databindningen av lblSession då du manuellt sätter texten.SqldataSource i code behind
Min kod ser ut så här:
<code>
protected void btnPreviewAdvertise_Click(object sender, EventArgs e)
{
try
{
adDB.addTempAdvertise(fillObjAdvertise());
pnlPreviewAdd.Visible = true;
lblError.Text = "";
}
catch (Exception err)
{
lblError.Text = err.Message.ToString();
}
Label lblSession = new Label();
lblSession.ID = "lblSession";
lblSession.Text = Session.SessionID.ToString();
lblSession.Visible = false;
lblSession.DataBind();
ControlParameter parameter = new ControlParameter();
parameter.Name = "userSession";
parameter.ControlID = "lblSession";
parameter.DefaultValue = Session.SessionID.ToString();
string connectionString = WebConfigurationManager.ConnectionStrings["con"].ConnectionString;
SqlDataSource sqlPreviewAd = new SqlDataSource();
sqlPreviewAd.ID = "sqlPreviewAd";
sqlPreviewAd.ConnectionString = connectionString;
sqlPreviewAd.SelectCommand = "getTempAdvertise";
sqlPreviewAd.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;
sqlPreviewAd.SelectParameters.Add(parameter);
sqlPreviewAd.DataBind();
GridView1.DataSource = sqlPreviewAd;
GridView1.DataBind();
}
</code>
Med denna kod får jag felmeddelandet:
<b>
The SqlDataSource control 'System.Web.UI.Webcontrols.SqlDataSource' does not have a naming container. Ensure that the control is added to the page before calling DataBind.
</b>
på aspx-sidan har jag detta:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" ShowHeader="False">Sv: SqldataSource i code behind
<code>
using System.Data.SqlClient;
...
string connectionString = WebConfigurationManager.ConnectionStrings["con"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand("getTempAdvertise",conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@userSession",Session.SessionID);
conn.Open();
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
conn.Close();
}
</code>
Bara mina 2 cent...hoppas du fått någon hjälp