любая альтернатива xmldatasource в элементе управления asp.net - PullRequest
0 голосов
/ 11 февраля 2011

мой код выглядит следующим образом

DataSet ds = new DataSet();
        string connStr = "Data Source=PARITAS00024;Initial Catalog=MenuDb;Persist Security Info=True;User ID=sa;Password=paritas123";
        using (SqlConnection conn = new SqlConnection(connStr))
        {
            string sql = "Select MenuId, MenuTitle, MenuDesc, MenuURL, ParentMenuId from tblMenus where Status=1 and RecordStatus=1 order by ParentMenuId, DisplayOrder";
            SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            da.Fill(ds);
            da.Dispose();
        }
        ds.DataSetName = "Menus";
        ds.Tables[0].TableName = "Menu";
        DataRelation relation = new DataRelation("ParentChild", ds.Tables["Menu"].Columns["MenuId"], ds.Tables["Menu"].Columns["ParentMenuId"], true);

        relation.Nested = true;
        ds.Relations.Add(relation);

        System.Web.UI.WebControls.XmlDataSource xds = new System.Web.UI.WebControls.XmlDataSource();
        xds.TransformFile = "~/TransformXSLT.xsl";
        xds.XPath = "MenuItems/MenuItem";
        xds.Data = ds.GetXml();
        xds.ID = "xmlDataSourceMenu";

        Menu1.DataSource = xds;
        Menu1.DataBind();

это правильный способ использования xmldatasource?

Ответы [ 2 ]

1 голос
/ 11 февраля 2011

Преимущества использования источников данных связаны с декларативным программированием : перенести фокус с того, как должна быть выполнена работа, на результаты. Если вы используете источник данных в обязательном порядке, вы потеряете все преимущества.

В этом коде вы предоставляете вашему меню некоторые XML-данные, которые преобразовывают XML-представление DataSet, возвращаемого запросом посредством XSL-преобразования: вам действительно нужно выполнять всю эту работу?

Почему бы не заполнить меню программно?

  foreach (DataRow parentItem in ds.Tables[0].Rows)
  {
    MenuItem item = new MenuItem((string)parentItem["Name"]);
    menu.Items.Add(categoryItem);

    ...
  }

или, почему бы не использовать XmlDataSource в aspx:

<asp:XmlDataSource TransformFile="~/TransformXSLT.xsl" XPath="MenuItems/MenuItem" ID="xmlDataSourceMenu" runat="server" />

и в коде позади:

...
xmlDataSourceMenu.Data = ds.GetXml();
...
0 голосов
/ 07 сентября 2012
try
{
    XmlDocument xdoc = new XmlDocument();    
    SqlConnection cnn = null;    
    SqlCommand cmd = null;    

    // connection string from web.config
    cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["____"].ConnectionString);
    cnn.Open();

    // SP must return hierarchy of menu items.
    string strUSP = "USP_XMLStoredProcedureName"; 
    cmd = new SqlCommand(strUSP, cnn);

    XmlReader reader = cmd.ExecuteXmlReader();

    if (reader.Read()) { xdoc.Load(reader); }

    // DRAG AND DROP XMLDataSource from toolbox , provide id as "DataSourceXML"
    DataSourceXML.Data = xdoc.InnerXml.ToString();

    // To avoid root
    DataSourceXML.XPath = "/ParentMenu/SubMenu";

    // :: Provide XMLDatasource ID to Menucontrol.

    // OR
    XmlDataSource XDS = new XmlDataSource();
    XDS.ID = "XMLDataSourceID";
    XDS.Data= xdoc.InnerXml;

    // To avoid root
    XDS.XPath = "/ParentMenu/SubMenu";

    MyMenu.DataSource = XDS;
    MyMenu.DataBind();

}
catch (Exception ex)
{
    throw ex;
}
finally
{
    cmd.Dispose();
    cnn.Close();
}
...