计算动态表行的问题(获取下拉值) [英] Problems counting dynamic table rows (get dropdown values)

查看:59
本文介绍了计算动态表行的问题(获取下拉值)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题,我的下拉值是动态的,我在动态表中创建了一些行,在那里我有更多下拉列表,其中有级联的下拉列表,所以当在第一个下拉列表中选择然后填写使用适合的数据输出下拉数字2。我的问题是使它成为动态的,因此它适用于表中的所有行而不仅仅是第一行。并试图计算行数,但无法使其工作。



我需要在seleceted index change方法的下拉列表中添加一个id,所以它适用于所有下拉菜单



C#



创建

Hi, I have a problem getting my dropdown values dynamic, I make some rows in a dynamic table, where I make more dropdown where there are cascading dropddowns so when choosing in the first dropdown then fill out the dropddown number 2 with that data which fits to. My problem is to make it dynamic so it works on all rows in the table and not just the first row. And have tried to count the rows but can not make it work.

I need to add an id to the dropdown in seleceted index change method, so it work on all dropdowns

C#

Create

private void CreateDynamicTable()
{
    PlaceHolder1.Controls.Clear();

    // Fetch the number of Rows and Columns for the table 
    // using the properties
    int tblRows = Rows;
    int tblCols = Columns;

    // Create a Table and set its properties 
    Table tbl = new Table();
    tbl.ID = "Table1";

    // Add the table to the placeholder control
    PlaceHolder1.Controls.Add(tbl);

    // Now iterate through the table and add your controls 
    XmlDocument doc = new XmlDocument();

    doc.Load(Server.MapPath("./xmlReBikeInfo/InfoBikeResponse.xml"));

    for (int i = 0; i < Rows; i++)
    {
        TableRow tr = new TableRow();
        for (int j = 0; j < tblCols; j++)
        {
            TableCell tc = new TableCell();
            TextBox txtBox = new TextBox();

            txtBox.ID = "txtBox:" + i + " " + "ColumnNo:" + " " + j;
            txtBox.EnableViewState = true;

            // Add the control to the TableCell
            tc.Controls.Add(txtBox);

            DropDownList ddl = new DropDownList();
            ddl.ID = "ddlBike_" + i;
            ddl.CssClass = "dropdown";
            ddl.AutoPostBack = true;
            ddl.EnableViewState = true;
            ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged);

            XmlNodeList nodeList = doc.SelectNodes("InfoBikeResponse/BikeTypes/BikeType");

            foreach (XmlNode node in nodeList)
            {
                ddl.Items.Add(new ListItem(node["TypeName"].InnerText + ""));
                ddl.ClearSelection();
            }

            DropDownList ddlSize = new DropDownList();
            ddlSize.CssClass = "dropdown";
            ddlSize.ID = "ddlSize_" + i;
            ddlSize.Visible = false;

            DropDownList ddlHjl = new DropDownList();
            ddlHjl.CssClass = "dropdown";
            ddlHjl.ID = "Hjelm" + i;

            ddlHjl.Items.Add(new ListItem("Hjelm", "0"));
            ddlHjl.Visible = false;

            XmlNodeList nodeListHjl = doc.SelectNodes("InfoBikeResponse/BikeHelmets/HelmetType");

            foreach (XmlNode node in nodeListHjl)
            {
                ddlHjl.Items.Add(new ListItem(node["HelmetId"].InnerText + HttpUtility.HtmlDecode("  ") + "" + HttpUtility.HtmlDecode("  ") + node["HelmetName"].InnerText + ""));
                ddlHjl.ClearSelection();
            }

            DropDownList ddlTil = new DropDownList();
            ddlTil.CssClass = "dropdown";
            ddlTil.ID = "Tilbehor" + i;

            ddlTil.Items.Add(new ListItem("Tilbehør", "0"));
            ddlTil.Visible = false;

            XmlNodeList nodeListTil = doc.SelectNodes("InfoBikeResponse/BikeAccessories/Accessorie");

            foreach (XmlNode node in nodeListTil)
            {
                ddlTil.Items.Add(new ListItem(node["AccessorieId"].InnerText + HttpUtility.HtmlDecode("  ") + "" + HttpUtility.HtmlDecode("  ") + node["AccessorieName"].InnerText + ""));
                ddlTil.ClearSelection();
            }

            tc.Controls.Add(ddl);
            tc.Controls.Add(ddlHjl);
            tc.Controls.Add(ddlTil);
            tc.Controls.Add(ddlSize);

            // Add the TableCell to the TableRow
            tr.Cells.Add(tc);
        }

        // Add the TableRow to the Table
        tbl.Rows.Add(tr);
    }

    // This parameter helps determine in the LoadViewState event,
    // whether to recreate the dynamic controls or not

}

ViewState["dynamictable"] = true;



选定的索引更改


Selected index change

 protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
    //PlaceHolder1.Controls.Clear();

    XmlDocument doc = new XmlDocument();

    doc.Load(Server.MapPath("./xmlReBikeInfo/InfoBikeResponse.xml"));

    DropDownList ddl = (DropDownList)PlaceHolder1.FindControl("ddlBike_0");
    //Use Request objects for getting the previous data of the dynamic textbox

    string biketype = ddl.SelectedValue;

    lbl.Text = biketype.ToString();

    DropDownList ddlSize = (DropDownList)PlaceHolder1.FindControl("ddlSize_0");
    ddlSize.CssClass = "dropdown";
    ddlSize.ID = "ddlSize";
    ddlSize.Visible = false;

    XDocument xdoc = XDocument.Load(Server.MapPath("./xmlReBikeInfo/InfoBikeResponse.xml"));
    var bikeSizes = xdoc.Descendants("BikeType")
        .Where(x => x.Element("TypeName").Value == biketype)
        .SelectMany(x => x.Descendants("SizeName").Select(y => y.Value))
        .ToList();

    if (biketype == "Sport Bike")
    {
        ddlSize.Items.Add(new ListItem("Højde tester", "0"));

        foreach (string s in bikeSizes)
        {
            ddlSize.Items.Add(new ListItem(s + ""));
            ddlSize.ClearSelection();

            lbl.Text = s.ToString();
        }

        ddlSize.Visible = true;
    }

    if (biketype == "Classic")
    {
        ddlSize.Items.Add(new ListItem("Højde tester", "0"));

        foreach (string s in bikeSizes)
        {
            ddlSize.Items.Add(new ListItem(s + ""));
            ddlSize.ClearSelection();

            lbl.Text = s.ToString();
        }
        ddlSize.Visible = true;
    }
}





我的尝试:



谷歌,计算行和triede设置计数器



What I have tried:

Google, counting rows and triede to set an counter

推荐答案

假设你继续开发应用程序,这里已经描述过:如何将multible foreach XML与multible一起使用下拉列表 [ ^ ]并且您希望将xml数据转换为 DataTable [ ^ ],请检查此代码:



Assuming that you continue developing application, which has been described here: How do I use multible foreach XML with multible dropdowns[^] and you would like to "convert" xml data into DataTable[^], please check this code:

XDocument xdoc = XDocument.Load(<xml_stream_here>);
//create datatable
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Type", typeof(string));
dt.Columns.Add("Price", typeof(double));
dt.Columns.Add("PriceVat", typeof(double));
dt.Columns.Add("Sizes", typeof(string));
dt.Columns.Add("Count", typeof(int));
//fetch data from xml and convert it into DataRow
var bikes = xdoc.Descendants("BikeType")
	.GroupBy(x=>x.Element("TypeName"))
	.Select(grp=> dt.LoadDataRow(new object[]
	{
		grp.Elements("Id").Select(i=>i.Value).SingleOrDefault(),
		grp.Key.Value,
		grp.Elements("TypePrice").Select(p=>p.Value).SingleOrDefault(),
		grp.Elements("TypePriceVat").Select(pv=>pv.Value).SingleOrDefault(),
		string.Join("; ", grp.Descendants("SizeName").Select(s=>s.Value)),
		grp.Descendants("Size").Count()
	}, false));
	
//copy rows into DataTable
dt = bikes.CopyToDataTable();





dt 对象存储数据如下:



dt object stores data as follow:

Id Type        Price  PriceVat Sizes                     Count
1  Classic     150    187,5    155-167; 168-172; 173-185 3 
2  Sport Bike  185    231,25   155-167; 168-172          2 
3  MTB         220    275      155-167; 168-172          2 
4  Classic E   170    212,5    168-172                   1 


这篇关于计算动态表行的问题(获取下拉值)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆