TreeView静态生成时,用下面的代码就可以实现点击TreeView的一个节点,GridView就可以显示相应的检索数据。
前台页面代码:
<asp:TreeView ID="tvGType" runat="server" NodeIndent="10" ShowExpandCollapse="False" ShowLines="True" OnSelectedNodeChanged="tvGType_SelectedNodeChanged" >
<Nodes>
<asp:TreeNode Text="文艺" Value="文艺">
<asp:TreeNode Text="小说" Value="小说">
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="科技" Value="科技">
<asp:TreeNode Text="计算机" Value="计算机"></asp:TreeNode>
</asp:TreeNode>
</Nodes>
<asp:GridView
<Columns>
<asp:BoundField DataField="book_Name" HeaderText="书名" SortExpression="book_Name" />
<asp:BoundField DataField="bT_Name" HeaderText="类别" SortExpression="bT_Name" />
<asp:BoundField DataField="book_ID" HeaderText="书编号" ReadOnly="True" SortExpression="book_ID" />
<asp:BoundField DataField="book_Desc" HeaderText="所属" />
<asp:HyperLinkField DataNavigateUrlFormatString="BookDetail.aspx?book_ID={0}" NavigateUrl="~/前台/BookDetail.aspx"
Text="详细信息" DataNavigateUrlFields="book_ID" HeaderText="详细信息" />
</Columns>
</asp:GridView>
实现代码:
protected void Page_Load(object sender, EventArgs e)
{
book book = new book();
DataSet ds = book.GetType();
gvGoodsInfo.DataSource = ds;
gvGoodsInfo.DataBind();
} protected void gvGoodsInfo_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.gvGoodsInfo.PageIndex = e.NewPageIndex;
book book = new book();
DataSet ds = book.GetType();
gvGoodsInfo.DataSource = ds;
gvGoodsInfo.DataBind();
}
protected void tvGType_SelectedNodeChanged(object sender, EventArgs e)
{
string sSeleNodeText = tvGType.SelectedValue.ToString();
string sqlstr = "select * from bookInfo where bT_Name='" + sSeleNodeText + "' or bookType='" + sSeleNodeText + "'";
this.DataBind(gvGoodsInfo, sqlstr);
}
public void DataBind(GridView gv, string sqlstr)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString);
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(sqlstr, conn);
DataSet ds = new DataSet();
da.Fill(ds);
gv.DataSource = ds;
gv.DataBind();
conn.Close();
}
}
但是我把TreeView用代码动态生成就不行了,代码如下:
前台页面代码:
<asp:TreeView OnTreeNodePopulate="TreeView1_TreeNodePopulate" ShowLines="True" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged"/></td>
<asp:GridView ID="gvGoodsInfo" runat="server" AutoGenerateColumns="False" AllowPaging="True" PageSize="3" Width="411px" BorderStyle="Outset" OnPageIndexChanging="gvGoodsInfo_PageIndexChanging" ">
<Columns>
<asp:BoundField DataField="book_Name" HeaderText="书名" SortExpression="book_Name" />
<asp:BoundField DataField="bT_Name" HeaderText="类别" SortExpression="bT_Name" />
<asp:BoundField DataField="book_ID" HeaderText="书编号" ReadOnly="True" SortExpression="book_ID" />
<asp:BoundField DataField="book_Desc" HeaderText="所属" />
<asp:HyperLinkField DataNavigateUrlFormatString="BookDetail.aspx?book_ID={0}" NavigateUrl="~/前台/BookDetail.aspx"
Text="详细信息" DataNavigateUrlFields="book_ID" HeaderText="详细信息" />
</Columns>
<PagerSettings FirstPageText="首页" LastPageText="末页" Mode="NextPrevious" NextPageText="下一页"
PreviousPageText="前一页" />
</asp:GridView>
</td></tr></table>
</div>
</form>
</body>
</html>
后台代码:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack == false)
{
PopulateRootLevel();//调用方法动态生成树
} //给GridView动态绑定数据源
book book = new book();
DataSet ds = book.GetType();
gvGoodsInfo.DataSource = ds;
gvGoodsInfo.DataBind();
}
protected void gvGoodsInfo_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
//支持GridView分页
this.gvGoodsInfo.PageIndex = e.NewPageIndex;
book book = new book();
DataSet ds = book.GetType();
gvGoodsInfo.DataSource = ds;
gvGoodsInfo.DataBind();
}
//获取并绑定数据源
private void PopulateRootLevel()
{ SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString);
SqlCommand cmd = new SqlCommand(@"select Type.bT_ID,Type.bT_Name,count(distinct Left(book.book_ID,4)) 细类数目 from Type,Book where Left(book.book_ID,2)=Type.bT_ID group by Type.bT_ID ,Type.bT_Name", conn);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
ada.Fill(dt);
PopulateNodes(dt,TreeView1.Nodes);
}
//动态生成TreeView节点
private void PopulateNodes(DataTable dt, TreeNodeCollection nodes)
{
foreach(DataRow dr in dt.Rows)
{
TreeNode tn=new TreeNode();
tn.Text = dr["bT_Name"].ToString();
tn.Value = dr["bT_ID"].ToString();
nodes.Add(tn);
tn.PopulateOnDemand = ((int)(dr["细类数目"]) > 0);
}
}
//生成子节点方法
private void PopulateSubLevel(int parentid, TreeNode parentNode)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString);
SqlCommand cmd = new SqlCommand("BTID ", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parameterBTID = new SqlParameter("@BTID",SqlDbType.Int);
parameterBTID.Value = parentid;
cmd.Parameters.Add(parameterBTID);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
ada.Fill(dt);
PopulateNodes(dt,parentNode.ChildNodes); }
//触发生成子节点事件
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
PopulateSubLevel(Int32.Parse(e.Node.Value), e.Node);
}
//选择子节点则GridView显示响应的信息
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
string sSeleNodeText = TreeView1.SelectedValue.ToString();
string sqlstr = "select * from bookInfo where bT_Name='" + sSeleNodeText + "' or bookType='" + sSeleNodeText + "'";
this.DataBind(gvGoodsInfo, sqlstr);
}
//给GridView绑定不同的数据源而动态变化
public void DataBind(GridView gv, string sqlstr)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString);
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(sqlstr, conn);
DataSet ds = new DataSet();
da.Fill(ds);
gv.DataSource = ds;
gv.DataBind();
conn.Close();
}
}
好心的朋友们帮我指点下迷津把!谢谢!
前台页面代码:
<asp:TreeView ID="tvGType" runat="server" NodeIndent="10" ShowExpandCollapse="False" ShowLines="True" OnSelectedNodeChanged="tvGType_SelectedNodeChanged" >
<Nodes>
<asp:TreeNode Text="文艺" Value="文艺">
<asp:TreeNode Text="小说" Value="小说">
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="科技" Value="科技">
<asp:TreeNode Text="计算机" Value="计算机"></asp:TreeNode>
</asp:TreeNode>
</Nodes>
<asp:GridView
<Columns>
<asp:BoundField DataField="book_Name" HeaderText="书名" SortExpression="book_Name" />
<asp:BoundField DataField="bT_Name" HeaderText="类别" SortExpression="bT_Name" />
<asp:BoundField DataField="book_ID" HeaderText="书编号" ReadOnly="True" SortExpression="book_ID" />
<asp:BoundField DataField="book_Desc" HeaderText="所属" />
<asp:HyperLinkField DataNavigateUrlFormatString="BookDetail.aspx?book_ID={0}" NavigateUrl="~/前台/BookDetail.aspx"
Text="详细信息" DataNavigateUrlFields="book_ID" HeaderText="详细信息" />
</Columns>
</asp:GridView>
实现代码:
protected void Page_Load(object sender, EventArgs e)
{
book book = new book();
DataSet ds = book.GetType();
gvGoodsInfo.DataSource = ds;
gvGoodsInfo.DataBind();
} protected void gvGoodsInfo_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.gvGoodsInfo.PageIndex = e.NewPageIndex;
book book = new book();
DataSet ds = book.GetType();
gvGoodsInfo.DataSource = ds;
gvGoodsInfo.DataBind();
}
protected void tvGType_SelectedNodeChanged(object sender, EventArgs e)
{
string sSeleNodeText = tvGType.SelectedValue.ToString();
string sqlstr = "select * from bookInfo where bT_Name='" + sSeleNodeText + "' or bookType='" + sSeleNodeText + "'";
this.DataBind(gvGoodsInfo, sqlstr);
}
public void DataBind(GridView gv, string sqlstr)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString);
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(sqlstr, conn);
DataSet ds = new DataSet();
da.Fill(ds);
gv.DataSource = ds;
gv.DataBind();
conn.Close();
}
}
但是我把TreeView用代码动态生成就不行了,代码如下:
前台页面代码:
<asp:TreeView OnTreeNodePopulate="TreeView1_TreeNodePopulate" ShowLines="True" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged"/></td>
<asp:GridView ID="gvGoodsInfo" runat="server" AutoGenerateColumns="False" AllowPaging="True" PageSize="3" Width="411px" BorderStyle="Outset" OnPageIndexChanging="gvGoodsInfo_PageIndexChanging" ">
<Columns>
<asp:BoundField DataField="book_Name" HeaderText="书名" SortExpression="book_Name" />
<asp:BoundField DataField="bT_Name" HeaderText="类别" SortExpression="bT_Name" />
<asp:BoundField DataField="book_ID" HeaderText="书编号" ReadOnly="True" SortExpression="book_ID" />
<asp:BoundField DataField="book_Desc" HeaderText="所属" />
<asp:HyperLinkField DataNavigateUrlFormatString="BookDetail.aspx?book_ID={0}" NavigateUrl="~/前台/BookDetail.aspx"
Text="详细信息" DataNavigateUrlFields="book_ID" HeaderText="详细信息" />
</Columns>
<PagerSettings FirstPageText="首页" LastPageText="末页" Mode="NextPrevious" NextPageText="下一页"
PreviousPageText="前一页" />
</asp:GridView>
</td></tr></table>
</div>
</form>
</body>
</html>
后台代码:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack == false)
{
PopulateRootLevel();//调用方法动态生成树
} //给GridView动态绑定数据源
book book = new book();
DataSet ds = book.GetType();
gvGoodsInfo.DataSource = ds;
gvGoodsInfo.DataBind();
}
protected void gvGoodsInfo_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
//支持GridView分页
this.gvGoodsInfo.PageIndex = e.NewPageIndex;
book book = new book();
DataSet ds = book.GetType();
gvGoodsInfo.DataSource = ds;
gvGoodsInfo.DataBind();
}
//获取并绑定数据源
private void PopulateRootLevel()
{ SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString);
SqlCommand cmd = new SqlCommand(@"select Type.bT_ID,Type.bT_Name,count(distinct Left(book.book_ID,4)) 细类数目 from Type,Book where Left(book.book_ID,2)=Type.bT_ID group by Type.bT_ID ,Type.bT_Name", conn);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
ada.Fill(dt);
PopulateNodes(dt,TreeView1.Nodes);
}
//动态生成TreeView节点
private void PopulateNodes(DataTable dt, TreeNodeCollection nodes)
{
foreach(DataRow dr in dt.Rows)
{
TreeNode tn=new TreeNode();
tn.Text = dr["bT_Name"].ToString();
tn.Value = dr["bT_ID"].ToString();
nodes.Add(tn);
tn.PopulateOnDemand = ((int)(dr["细类数目"]) > 0);
}
}
//生成子节点方法
private void PopulateSubLevel(int parentid, TreeNode parentNode)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString);
SqlCommand cmd = new SqlCommand("BTID ", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parameterBTID = new SqlParameter("@BTID",SqlDbType.Int);
parameterBTID.Value = parentid;
cmd.Parameters.Add(parameterBTID);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
ada.Fill(dt);
PopulateNodes(dt,parentNode.ChildNodes); }
//触发生成子节点事件
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
PopulateSubLevel(Int32.Parse(e.Node.Value), e.Node);
}
//选择子节点则GridView显示响应的信息
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
string sSeleNodeText = TreeView1.SelectedValue.ToString();
string sqlstr = "select * from bookInfo where bT_Name='" + sSeleNodeText + "' or bookType='" + sSeleNodeText + "'";
this.DataBind(gvGoodsInfo, sqlstr);
}
//给GridView绑定不同的数据源而动态变化
public void DataBind(GridView gv, string sqlstr)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString);
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(sqlstr, conn);
DataSet ds = new DataSet();
da.Fill(ds);
gv.DataSource = ds;
gv.DataBind();
conn.Close();
}
}
好心的朋友们帮我指点下迷津把!谢谢!
解决方案 »
- 关于有些同志下载【椰子壳】后,有些杀毒软件判定有病毒的解释
- c#读写excel问题?
- 求书名?
- ArrayList怎么存放数据
- access操作问题(数据库更新不了)为什么???
- 请教一个C#计时器问题,怎样计算两个事件发生的时间间隔
- Win32_ServerConnection 得到的ComputerName 怎么转成IP地址格式
- 比较尖端的问题,C#wpf移入文本框,怎么获取到光标附近文本框里的文字?(求高手解答)
- 求一条SQL语句,将一个字段显示成两列
- 高分求个桌面读写器动态读卡器调用14443卡的代码
- winform 图片列表显示
- ado.net怎样传递数组参数给oracle存储过程?
gv.DataBind();
试试。
呵呵
是不是gridview绑定的问题,
我今天也做了gridview的绑定,数据源要绑定,还要将datamember绑定表
是不是绑定数据源的问题啊!
我今天也做了datagrid的动态绑定,麻烦的是:要绑定datasource还有datamember
Gridview的动态绑定不需要纳闷麻烦吧!
foreach(DataRow dr in dt.Rows)
{
TreeNode tn=new TreeNode();
tn.Text = dr["bT_Name"].ToString();
tn.Value = dr["bT_ID"].ToString();
nodes.Add(tn);
tn.PopulateOnDemand = ((int)(dr["细类数目"]) > 0);
}
注意:你节点绑定的时候,text和Value绑定的是不一样的。text是名称 value是Id
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
string sSeleNodeText = TreeView1.SelectedValue.ToString();
string sqlstr = "select * from bookInfo where bT_Name='" + sSeleNodeText + "' or bookType='" + sSeleNodeText + "'";
this.DataBind(gvGoodsInfo, sqlstr);
}
而你在改变的时候使用的是TreeView1.SelectedValue,而这个得到的是节点的ID而不是名称这个可能是问题的原因,