在asp.net中使用数据库绑定菜单控件

问题描述:

您好我有3个表,这些是产品表,catagory表和子目录表。使用这3个表我需要将菜单控件与sql server数据库绑定。在这个当我点击产品名称时,我必须显示catagoies和子目录,我必须在点击这些子目录时显示catagories和子目录的内容。



i我正在使用这个代码



使用System;

使用System.Data;

使用System.Configuration;

使用System.Collections;

使用System.Web;

使用System.Web.Security;

使用System .Web.UI;

使用System.Web.UI.WebControls;

使用System.Web.UI.WebControls.WebParts;

使用System.Web.UI.HtmlControls;

使用System.Data.SqlClient;

使用System.Data.SqlTypes;

使用System.IO ;



public partial class construction_materials:System.Web.UI.Page

{

string str = System .Configuration.ConfigurationManager.AppSettings [ConnectionString]。ToString();



protected void Page_Load(object s ender,EventArgs e)

{

if(!IsPostBack)

{



PopulateMenu();



}

}

DataSet GetMenuData()

$

SqlConnection con = new SqlConnection(str);

SqlDataAdapter dadCats = new SqlDataAdapter(SELECT catid,catname,productid FROM tbl_productcatagory where productid = 1,con );

SqlDataAdapter dadProducts = new SqlDataAdapter(SELECT subcatid,catid,subcatagoryname FROM tbl_productsubcatagory,con);

DataSet dst = new DataSet();

dadCats.Fill(dst,tbl_productcatagory);

dadProducts.Fill(dst,tbl_productsubcatagory);

dst.Relations.Add(Children ,

dst.Tables [tbl_productcatagory]。列[catid],

dst.Tables [tbl_productsubcatagory]。列[catid]) ;

返回dst;

}





public void PopulateMenu()

{

DataSet dst = GetMenuData();

foreach(dst.Tables中的DataRow masterRow [tbl_productcatagory]。行)

{

MenuItem masterItem = new MenuItem((string)masterRow [catname]);

Menu1.Items.Add(masterItem);

foreach( MasterRow中的DataRow childRow.GetChildRows(Children))

{

MenuItem childItem = new MenuItem((string)childRow [subcatagoryname],, ,(〜/ default.aspx?catid =+(masterRow [catid]。ToString())+& subcatid =+(childRow [subcatid]。ToString())),_ parent );

masterItem.ChildItems.Add(childItem);

}

}



}

}



但是我收到了这个错误。



Th因为并非所有值都具有相应的父值,所以无法启用约束。



你可以帮助我....

Hi i have 3 tables these are products table, catagory table, and sub catagory table. using these 3 tables i need to bind menu control with sql server database. in this when i click product name i have to display the catagoies and sub catagories and i have to display the content of catagories and sub catagories while clicking those sub catagories.

i am using this code

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.IO;

public partial class construction_materials : System.Web.UI.Page
{
string str = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString();

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{

PopulateMenu();

}
}
DataSet GetMenuData()
{
SqlConnection con = new SqlConnection(str);
SqlDataAdapter dadCats = new SqlDataAdapter("SELECT catid, catname,productid FROM tbl_productcatagory where productid=1", con);
SqlDataAdapter dadProducts = new SqlDataAdapter("SELECT subcatid, catid, subcatagoryname FROM tbl_productsubcatagory ", con);
DataSet dst = new DataSet();
dadCats.Fill(dst, "tbl_productcatagory");
dadProducts.Fill(dst, "tbl_productsubcatagory");
dst.Relations.Add("Children",
dst.Tables["tbl_productcatagory"].Columns["catid"],
dst.Tables["tbl_productsubcatagory"].Columns["catid"]);
return dst;
}


public void PopulateMenu()
{
DataSet dst = GetMenuData();
foreach (DataRow masterRow in dst.Tables["tbl_productcatagory"].Rows)
{
MenuItem masterItem = new MenuItem((string)masterRow["catname"]);
Menu1.Items.Add(masterItem);
foreach (DataRow childRow in masterRow.GetChildRows("Children"))
{
MenuItem childItem = new MenuItem((string)childRow["subcatagoryname"], "", "", ("~/default.aspx?catid=" + (masterRow["catid"].ToString()) + "&subcatid=" + (childRow["subcatid"].ToString())), "_parent");
masterItem.ChildItems.Add(childItem);
}
}

}
}

But i am getting this error.

This constraint cannot be enabled as not all values have corresponding parent values.

can u please help me....

验证两个表中的数据。检查Sub Category表中的所有行都有CatId。如果任何一行缺少CatId,则会发生此错误。

解决方案是将DataRelation类中的约束设置为false



Verify the data in both the tables. Check all the rows in Sub Category table has CatId. If there any one row missing CatId then this error occurs.
The solutions is to set constraint in DataRelation class to false

dst.Relations.Add("Children",
dst.Tables["tbl_productcatagory"].Columns["catid"],
dst.Tables["tbl_productsubcatagory"].Columns["catid"], false);





默认情况下,当你创建一个关系时,它会强制执行外键约束,通过设置为false,你告诉它你不要想强制执行这种关系。



By default, when you create a relationship, it enforces foreign key constraints, by setting to false, you are telling it that you dont want to enforce the relationship.