有一表结构:
id
GoodsName
Specification
Price
Place
PhotoUrl
st1Class
st2Class
st3Class我想用一dropdownlist显示st1Class,改变选项时gridview显示相应的st2Class项
前台:<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="DropDownList1" runat="server" DataTextField="GoodsName" AutoPostBack="true" DataValueField="st1Class" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
<br />
<br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField HeaderText="分类" DataField="GoodsName" />
<asp:BoundField HeaderText="类ID" DataField="st1Class" />
</Columns>
</asp:GridView>
</div>
</form>
</body>后台: protected void Page_Load(object sender, EventArgs e)
{
string strConnection = "Provider=MicroSoft.Jet.OleDb.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath("App_Data/FKJdata.mdb");
OleDbConnection myObjConnection = new OleDbConnection(strConnection);
try
{
string queryString = "select GoodsName,St1Class from goodslist where st2Class is null and st3Class is null";
OleDbDataAdapter apReturnSt1 = new OleDbDataAdapter(queryString,myObjConnection);
DataSet dsSt1Class = new DataSet();
apReturnSt1.Fill(dsSt1Class);
DropDownList1.DataSource = dsSt1Class;
DropDownList1.DataBind();
}
finally
{
myObjConnection.Close();
} }
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
string strConnection = "Provider=MicroSoft.Jet.OleDb.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath("App_Data/FKJdata.mdb");
OleDbConnection myObjConnection = new OleDbConnection(strConnection);
try
{
string queryString="select GoodsName,St1Class from goodslist where st3Class is null and st2Class is not null and st1Class=?";
OleDbCommand myCommand = new OleDbCommand(queryString, myObjConnection);
OleDbParameter myParameter = new OleDbParameter("strSt1Class", OleDbType.VarChar, 30);
myParameter.Direction = ParameterDirection.Input;
myCommand.Parameters.Add(myParameter);
myCommand.Parameters["strSt1Class"].Value = DropDownList1.SelectedValue;
OleDbDataAdapter apReturnSt2 = new OleDbDataAdapter(myCommand);
DataSet dsSt2Class = new DataSet();
apReturnSt2.Fill(dsSt2Class);
GridView1.DataSource = dsSt2Class;
GridView1.DataBind();
}
finally
{
myObjConnection.Close();
}
}问题一:为什么gridview永远只显示st1Class=1时的相应项。
问题二:如果要局部刷新gridview要如何写?(有代码最好,没有的话给出参考资料也可以)本人新手,以上代码已写了两天还未成功,请各位帮我看看
id
GoodsName
Specification
Price
Place
PhotoUrl
st1Class
st2Class
st3Class我想用一dropdownlist显示st1Class,改变选项时gridview显示相应的st2Class项
前台:<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="DropDownList1" runat="server" DataTextField="GoodsName" AutoPostBack="true" DataValueField="st1Class" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
<br />
<br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField HeaderText="分类" DataField="GoodsName" />
<asp:BoundField HeaderText="类ID" DataField="st1Class" />
</Columns>
</asp:GridView>
</div>
</form>
</body>后台: protected void Page_Load(object sender, EventArgs e)
{
string strConnection = "Provider=MicroSoft.Jet.OleDb.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath("App_Data/FKJdata.mdb");
OleDbConnection myObjConnection = new OleDbConnection(strConnection);
try
{
string queryString = "select GoodsName,St1Class from goodslist where st2Class is null and st3Class is null";
OleDbDataAdapter apReturnSt1 = new OleDbDataAdapter(queryString,myObjConnection);
DataSet dsSt1Class = new DataSet();
apReturnSt1.Fill(dsSt1Class);
DropDownList1.DataSource = dsSt1Class;
DropDownList1.DataBind();
}
finally
{
myObjConnection.Close();
} }
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
string strConnection = "Provider=MicroSoft.Jet.OleDb.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath("App_Data/FKJdata.mdb");
OleDbConnection myObjConnection = new OleDbConnection(strConnection);
try
{
string queryString="select GoodsName,St1Class from goodslist where st3Class is null and st2Class is not null and st1Class=?";
OleDbCommand myCommand = new OleDbCommand(queryString, myObjConnection);
OleDbParameter myParameter = new OleDbParameter("strSt1Class", OleDbType.VarChar, 30);
myParameter.Direction = ParameterDirection.Input;
myCommand.Parameters.Add(myParameter);
myCommand.Parameters["strSt1Class"].Value = DropDownList1.SelectedValue;
OleDbDataAdapter apReturnSt2 = new OleDbDataAdapter(myCommand);
DataSet dsSt2Class = new DataSet();
apReturnSt2.Fill(dsSt2Class);
GridView1.DataSource = dsSt2Class;
GridView1.DataBind();
}
finally
{
myObjConnection.Close();
}
}问题一:为什么gridview永远只显示st1Class=1时的相应项。
问题二:如果要局部刷新gridview要如何写?(有代码最好,没有的话给出参考资料也可以)本人新手,以上代码已写了两天还未成功,请各位帮我看看
2.用个updatepanel
问题二、什么叫局部刷新?
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
initControl();
} } void initControl()
{
string strConnection = "Provider=MicroSoft.Jet.OleDb.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath("App_Data/FKJdata.mdb");
OleDbConnection myObjConnection = new OleDbConnection(strConnection);
try
{
string queryString = "select GoodsName,St1Class from goodslist where st2Class is null and st3Class is null";
OleDbDataAdapter apReturnSt1 = new OleDbDataAdapter(queryString, myObjConnection);
DataSet dsSt1Class = new DataSet();
apReturnSt1.Fill(dsSt1Class);
DropDownList1.DataSource = dsSt1Class;
DropDownList1.DataBind();
}
finally
{
myObjConnection.Close();
}
}
void bindGrid()
{
string strConnection = "Provider=MicroSoft.Jet.OleDb.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath("App_Data/FKJdata.mdb");
OleDbConnection myObjConnection = new OleDbConnection(strConnection);
try
{
string queryString = "select GoodsName,St1Class from goodslist where st3Class is null and st2Class is not null and st1Class=?";
OleDbCommand myCommand = new OleDbCommand(queryString, myObjConnection);
OleDbParameter myParameter = new OleDbParameter("strSt1Class", OleDbType.VarChar, 30);
myParameter.Direction = ParameterDirection.Input;
myCommand.Parameters.Add(myParameter);
myCommand.Parameters["strSt1Class"].Value = DropDownList1.SelectedValue;
OleDbDataAdapter apReturnSt2 = new OleDbDataAdapter(myCommand);
DataSet dsSt2Class = new DataSet();
apReturnSt2.Fill(dsSt2Class);
GridView1.DataSource = dsSt2Class;
GridView1.DataBind();
}
finally
{
myObjConnection.Close();
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
bindGrid();
}如果局部刷新,放在updatepanel就行了
果然加了if (!IsPostBack)就可以了。再想问一下,那个updatepanel是放在什么地方?前台还是后台?
<ContentTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" DataTextField="GoodsName" AutoPostBack="true" DataValueField="st1Class" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
<br />
<br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField HeaderText="分类" DataField="GoodsName" />
<asp:BoundField HeaderText="类ID" DataField="st1Class" />
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
if(!IsPostBck)
BindData();
这个你得去看看ajax
当gridview改变选择的时候,不是从girdview里面这个dropdownlsis(drop1)来读值(因为他一直
都会是默值也就是楼主所说,显示str1class)[为什么一时忘了] 那我们不从里面读值不就好了.点击完选择把drop2的值重新读进来付给drop1显示 这样就显示str2class了