C# 如何将控件参数从asp控件移动到C代码隐藏文件?
我正在清理ASP.NET webapp中的一堆旧代码,其中有一组ASP控制参数我想移到C codebehind文件中,但当我尝试仅在C文件中添加控制参数时,我不断收到一个错误 这就是我想做的:C# 如何将控件参数从asp控件移动到C代码隐藏文件?,c#,asp.net,code-behind,C#,Asp.net,Code Behind,我正在清理ASP.NET webapp中的一堆旧代码,其中有一组ASP控制参数我想移到C codebehind文件中,但当我尝试仅在C文件中添加控制参数时,我不断收到一个错误 这就是我想做的: <asp:SqlDataSource ID="ProviderSearchGridViewDataSource" runat="server"> <SelectParameters> <asp:ControlParameter ControlID="t
<asp:SqlDataSource ID="ProviderSearchGridViewDataSource" runat="server">
<SelectParameters>
<asp:ControlParameter ControlID="tbProvider" DefaultValue="%" Name="provider"
PropertyName="Text" />
</SelectParameters>
</asp:SqlDataSource>
然后,使用以下代码将该代码用作ascx文件上存在的gridview的数据源:
ProviderSearchGridView.DataSource = ProviderSearchGridViewDataSource;
ProviderSearchGridView.DataBind();
从asp文件中删除select参数后,仅使用C代码隐藏,在尝试数据绑定ProviderSearchGridView时,我会出现此错误:
Additional information: The SqlDataSource control '' does not have a naming container. Ensure that the control is added to the page before calling DataBind.
当控制参数在ascx文件中定义,而不是在C文件中定义时,我没有得到那个错误。我做错了什么?尝试添加:
ProviderSearchGridViewDataSource.ID = "ProviderSearchGridViewDataSource";
之后
所以它应该看起来像:
SqlDataSource ProviderSearchGridViewDataSource = new SqlDataSource();
ProviderSearchGridViewDataSource.ID = "ProviderSearchGridViewDataSource";
在这里,您可能会发现与您所做的类似的解释。这是我用来解决问题的完整代码:
protected void SearchButtonClick(object sender, EventArgs e)
{
try
{
DataSet tProviderData = SelectProviderWithParameter();
cProviderSearchGridView.DataSource = tProviderData;
cProviderSearchGridView.Visible = true;
cProviderSearchGridView.DataBind();
if (cProviderSearchGridView.Rows.Count == 0)
{
cSearchMessageLabel.Text = "No results found. Please modify your search and try again.";
cSearchMessageLabel.Visible = true;
}
else
{
cSearchMessageLabel.Visible = false;
}
}
catch (Exception ex)
{
throw ex;
}
}
private DataSet SelectProviderWithParameter()
{
DataSet tProviderData = new DataSet();
string tProviderTextboxContent = tbProvider.Text.Trim();
string tCityDropDownSelection = cCityDropDownList.SelectedValue.ToString().Trim();
string tPracticeGroupDropDownSelection = cProviderDropDownList.SelectedValue.ToString().Trim();
string tSpecialtyDropDownSelection = cSpecialtyDropDownList.SelectedValue.ToString().Trim();
string tZipTextboxContent = tbZip.Text.Trim();
string tProviderContractAreaDropDownSelection = cContractAreaDropDownList.SelectedValue.ToString().Trim();
using (SqlConnection tProviderConnection = new SqlConnection(DatabaseConnectionString))
{
using (SqlDataAdapter tProviderAdapter = new SqlDataAdapter())
{
try
{
tProviderConnection.Open();
SqlCommand tProviderSearch = new SqlCommand("dbo.SearchProvider", tProviderConnection);
tProviderSearch.CommandType = CommandType.StoredProcedure;
tProviderSearch.Parameters.AddWithValue("Provider", tProviderTextboxContent);
tProviderSearch.Parameters.AddWithValue("ProviderCity", tCityDropDownSelection);
tProviderSearch.Parameters.AddWithValue("ProviderPracticeGroup", tPracticeGroupDropDownSelection);
tProviderSearch.Parameters.AddWithValue("ProviderSpecialty", tSpecialtyDropDownSelection);
tProviderSearch.Parameters.AddWithValue("ProviderZipCode", tZipTextboxContent);
tProviderSearch.Parameters.AddWithValue("ProviderContractArea", tProviderTextboxContent);
tProviderAdapter.SelectCommand = tProviderSearch;
tProviderAdapter.Fill(tProviderData);
}
catch (Exception ex)
{
throw ex;
}
}
}
return tProviderData;
}
我试图解决的问题的重要部分是以下几行:
tProviderSearch.Parameters.AddWithValue("Provider", tProviderTextboxContent);
tProviderSearch.Parameters.AddWithValue("ProviderCity", tCityDropDownSelection);
tProviderSearch.Parameters.AddWithValue("ProviderPracticeGroup", tPracticeGroupDropDownSelection);
tProviderSearch.Parameters.AddWithValue("ProviderSpecialty", tSpecialtyDropDownSelection);
tProviderSearch.Parameters.AddWithValue("ProviderZipCode", tZipTextboxContent);
tProviderSearch.Parameters.AddWithValue("ProviderContractArea", tProviderTextboxContent);
构造SqlCommand对象后,就可以访问其Parameters属性,并在适配器执行搜索之前添加参数。在我的代码中,我只是直接从查询生成器的表单字段中提取了值。也许ProviderSearchGridViewDataSource在数据绑定之前超出了范围?尝试将成员变量用作SqlDataSource而不是局部变量。ProviderSearchGridView是否仍定义了DataSourceID?@Malk,否定,它是一个空字符串。@Mausimo我正在检查范围和名称冲突问题,但它看起来没有超出范围。完全删除该属性。
protected void SearchButtonClick(object sender, EventArgs e)
{
try
{
DataSet tProviderData = SelectProviderWithParameter();
cProviderSearchGridView.DataSource = tProviderData;
cProviderSearchGridView.Visible = true;
cProviderSearchGridView.DataBind();
if (cProviderSearchGridView.Rows.Count == 0)
{
cSearchMessageLabel.Text = "No results found. Please modify your search and try again.";
cSearchMessageLabel.Visible = true;
}
else
{
cSearchMessageLabel.Visible = false;
}
}
catch (Exception ex)
{
throw ex;
}
}
private DataSet SelectProviderWithParameter()
{
DataSet tProviderData = new DataSet();
string tProviderTextboxContent = tbProvider.Text.Trim();
string tCityDropDownSelection = cCityDropDownList.SelectedValue.ToString().Trim();
string tPracticeGroupDropDownSelection = cProviderDropDownList.SelectedValue.ToString().Trim();
string tSpecialtyDropDownSelection = cSpecialtyDropDownList.SelectedValue.ToString().Trim();
string tZipTextboxContent = tbZip.Text.Trim();
string tProviderContractAreaDropDownSelection = cContractAreaDropDownList.SelectedValue.ToString().Trim();
using (SqlConnection tProviderConnection = new SqlConnection(DatabaseConnectionString))
{
using (SqlDataAdapter tProviderAdapter = new SqlDataAdapter())
{
try
{
tProviderConnection.Open();
SqlCommand tProviderSearch = new SqlCommand("dbo.SearchProvider", tProviderConnection);
tProviderSearch.CommandType = CommandType.StoredProcedure;
tProviderSearch.Parameters.AddWithValue("Provider", tProviderTextboxContent);
tProviderSearch.Parameters.AddWithValue("ProviderCity", tCityDropDownSelection);
tProviderSearch.Parameters.AddWithValue("ProviderPracticeGroup", tPracticeGroupDropDownSelection);
tProviderSearch.Parameters.AddWithValue("ProviderSpecialty", tSpecialtyDropDownSelection);
tProviderSearch.Parameters.AddWithValue("ProviderZipCode", tZipTextboxContent);
tProviderSearch.Parameters.AddWithValue("ProviderContractArea", tProviderTextboxContent);
tProviderAdapter.SelectCommand = tProviderSearch;
tProviderAdapter.Fill(tProviderData);
}
catch (Exception ex)
{
throw ex;
}
}
}
return tProviderData;
}
tProviderSearch.Parameters.AddWithValue("Provider", tProviderTextboxContent);
tProviderSearch.Parameters.AddWithValue("ProviderCity", tCityDropDownSelection);
tProviderSearch.Parameters.AddWithValue("ProviderPracticeGroup", tPracticeGroupDropDownSelection);
tProviderSearch.Parameters.AddWithValue("ProviderSpecialty", tSpecialtyDropDownSelection);
tProviderSearch.Parameters.AddWithValue("ProviderZipCode", tZipTextboxContent);
tProviderSearch.Parameters.AddWithValue("ProviderContractArea", tProviderTextboxContent);