首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态html通过C#呈现包含数据的表的意外行为

问动态html通过C#呈现包含数据的表的意外行为
EN

Stack Overflow用户
提问于 2012-11-05 03:16:43
回答 1查看 211关注 0票数 3

我遇到了一个不熟悉的功能问题。我认为这与循环的范围以及呈现页面时的服务器端代码操作/操纵有关。

假设我想重复一个表行--每个表行都有一个文本输入,行和它们的文本框根据数据库“绑定”数据的内容用值呈现。

一切都很完美,直到添加了更多需求- READONLY属性和事件键(javascript小验证任务)。

否则,它确实可以工作,通过两个单独的字符串交替行,我用字符串格式“注入”在一个条件下,如果行计数是奇数和偶数,然后我试图过滤一些列,使一个按键事件绑定到一个js函数和另一个属性作为字符串。

如果字符串为空,则如果满足条件,则元素“声明”的结尾部分将为空,则该字符串被赋值为"ReadOnly“,并且js字符串被赋值为”调用函数代码“。

这是代码。这种情况很奇怪,因为style属性、当前列的信息、列名,除了READONLY属性和event键(javascript小验证任务)之外,所有东西都按预期运行。

呈现动态表代码

这是前台代码,c#后台代码是最常用的(尽量在客户端保留一点代码)

代码语言:javascript
复制
`ControlsInteraction.WithTable.Design()`

和

代码语言:javascript
复制
`ControlsInteraction.WithTable.ExtractData()`

处理列名称和值的呈现和转换的动态函数

代码语言:javascript
复制
int count = 0;
bool TblOk = DebugTests.Sesseion.SeSn.Raised(DebugTests.Flag.HT_DB_CPA_Table_init_Complete);
    if (TblOk)
    {
        string TextBxRendr = "";//holds Renderd <TD> base String-code

        string AltrnatBgColor;
        string NoAttribute = "";
        string Js_NumericKprss = "onkeypress=\"return onlN(event)\""
        string ReadOnly = "READONLY";
        var TimesCol = ALLTablesDataSet.Tables[Tbl1.TableName].Columns;
     string DtrawTbl1 = Tbl1.TableName;
     ControlsInteraction.WithTable.Design Tbldz = 
     new ControlsInteraction.WithTable.Design();

     ControlsInteraction.WithTable.ExtractData DtExtrct =
     new ControlsInteraction.WithTable.ExtractData();

        foreach (System.Data.DataRow TimesRow in ALLTablesSet.Tables[DtrawTbl].Rows)
        {

         AltrnatBgColor= Tbldz.RowsBGColorAlternate(RDE.DataRowToInt(TimesRow, "RecordNum"),true);
         altBgColOnly = Tbldz.RowsBGColorAlternate(RDE.DataRowToInt(TimesRow, "RecordNum"), false);
        Response.Write(string.Format("<tr {0}>",AltrnatBgColor));

                for (int i = 0; i < TimesRow.ItemArray.Length; i++)
                {
                        if (i != (TimesRow.ItemArray.Length - 1))
                        {


                        Js_NumericKprss = "onkeypress=\"return onlN(event)\"";

                   //asking for: current row will Not be read only via its name
                   if (DtExtrct.CurrRowIs(TimesRow, MyDBSchema.DBs_Cols.TblCPAReport.Comments, DtExtrct.DataRowToInt(TimesRow, "RecordNum")))
                                Js_NumericKprss = NoAttribute; // same goes with the other manipulation i've needed to implement on each column
                        TextBxRendr = string.Format(
                        "<td><input type='text' id=\"{0}_{1}\" value=\"{2} \" style=\"width:50px;{3} border:none; \" class=\"RepTblDataTDs\" {4} {5} \\></td>", 
                        TimesCol[i], TimesRow["RecordNum"], TimesRow[i], AltrnatBgColor,Js_NumericKprss,ReadOnly
                                                    );

                        }

                        else
                        {
                        TextBxRendr = string.Format(
        "<td><input type='image' id=\"{0}_{1}\" src=\"images/Save.png\" style=\"width:25px;{2}\" style=\"width:25px\" onclick=\"UbpdateTblCPA(this, {1});\" /></td>",
            "img",i + 1, AltrnatBgColor
                            );
                          }


                        Response.Write(TextBxRendr);
                        count++;
                 }

        }
}

正确注入和只读部分READONLY属性,以及事件键- (javascript小验证任务)

全部或无上的函数

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-05 23:31:07

回答我自己的问题的答案是

...well的所有内容,包括@Patrics的评论都是错误的

我只能说要注意:如何使用DataTable DataRow、DataTable DataColumns以及关系和foreach变量范围在每一行都使用可视化sudio调试器来检查代码值。

我没有时间重命名变量,但是如果您需要在DB表之外创建一个动态html表,那么这是一种方法

代码语言:javascript
复制
   foreach (System.Data.DataRow TimesRow in ALLTablesSet.Tables[DrawTbl].Rows)
    {
        recordNum = RDE.DataRowToInt(TimesRow, "RecordNum");
        AltBgCol = Tbldz.RowsBGColorAlternate(RDE.DataRowToInt(TimesRow, "RecordNum"), true);
        altBgColOnly = Tbldz.RowsBGColorAlternate(RDE.DataRowToInt(TimesRow, "RecordNum"), false);
        Response.Write(string.Format("<tr {0}>", AltBgCol));
        for (int i = 0; i < TimesRow.ItemArray.Length; i++)
        {


            if (i != (TimesRow.ItemArray.Length - 1))
            {
                Js_NumericKprss = "onkeypress=\"return onlN(event)\""; ReadOnly = "";
                if (RDE.CurrRowIs(TimesRow, HentalDBSchema.HTDB_Cols.TblTimeCPAReport.Comments, i))
                {
                    Js_NumericKprss = ""; ReadOnly = "";
                }

                else if (RDE.CurrRowIs(TimesRow, HentalDBSchema.HTDB_Cols.TblTimeCPAReport.Fines, i)
                 || RDE.CurrRowIs(TimesRow, MyDBSchema.DBs_Cols.TblCPAReport.PhoneExpences, i)
                 || RDE.CurrRowIs(TimesRow, MyDBSchema.DBs_Cols.TblCPAReport.SalaryPerDay, i)
                 || RDE.CurrRowIs(TimesRow, MyDBSchema.DBs_Cols.TblCPAReport.SalaryPerMonth, i)
                 || RDE.CurrRowIs(TimesRow, MyDBSchema.DBs_Cols.TblCPAReport.TotalGrossWages, i)
                 || RDE.CurrRowIs(TimesRow, MyDBSchema.DBs_Cols.TblCPAReport.TravelFee, i))
                {
                    ReadOnly = "";
                    Js_NumericKprss = "onkeypress=\"return onlN(event)\"";
                }
                else
                    ReadOnly = "READONLY";

                TxtRndr = string.Format("<td><input type='text' id=\"{0}_{1}\" value=\"{2} \" style=\"width:50px;{3} border:none; \" class=\"RepTblDataTDs\" {5} {6} \\></td>{4}", TimesCol[i], TimesRow["RecordNum"], TimesRow[i], altBgColOnly, Environment.NewLine + "\t\t\t", Js_NumericKprss, ReadOnly);
            }

            else
            {
                TxtRndr = string.Format("<td><input type='image' id=\"{0}_{1}\" src=\"images/Save.png\" style=\"width:25px;{3}\" style=\"width:25px\" onclick=\"UbpdateTblCPA(this, {1});\" /></td>{4}", "imgBut", i + 1, TimesRow[i], altBgColOnly, Environment.NewLine + "\t\t\t");
            }


            Response.Write(TxtRndr);




            count++;
        }

    }

我添加了所有的研究,我已经做了更容易的data提取和一些更多的方法,我已经在工作,所以如果你想使用它随时…

代码语言:javascript
复制
    public class ControlsInteraction
    {
        public class WithDDL
        {
            public class GetSelVal
            {
                public string AsString(DropDownList DDLToCollectValusFrom)
                {

                    return DDLToCollectValusFrom.SelectedValue;
                }
                public int AsInt(DropDownList DDLToCollectValusFrom)
                { 
                    if(DDLToCollectValusFrom.SelectedValue != null)
                    return Convert.ToInt32(DDLToCollectValusFrom.SelectedValue);
                    return 666;
                }
            }
            public List<string> GetListItems_Values(DropDownList DDLToCollectValusFrom)
            {
                List<string> LST_DDLValues = new List<string>();
                foreach (ListItem item in DDLToCollectValusFrom.Items)
                {
                    LST_DDLValues.Add(item.Value);


                }
                return LST_DDLValues;
            }
            public List<string> GetListItems_Text(DropDownList DDLToCollectTextFrom)
            {
                List<string> LST_DDLTEXT = new List<string>();
                foreach (ListItem item in DDLToCollectTextFrom.Items)
                {
                    LST_DDLTEXT.Add(item.Text);


                }
                return LST_DDLTEXT;
            }
        }
        public static class WithPlcHldr
        {
            public static void AddCtrl(PlaceHolder PlcHldrID, Control CntrID)
            {
                PlcHldrID.Controls.Add(CntrID);
            }
        }
        public class WithTable
        {
            public class Design
            {
                public string RowsBGColorAlternate(int RowCounter, bool AddWithStyleAsStandAlone = false)
                {
                    string BgCol = ""; bool bgclaltrnator;
                    if (RowCounter > 0)
                    {
                        RowCounter++;
                        bgclaltrnator = (RowCounter % 2) == 0;
                        if (bgclaltrnator)
                            BgCol = "#70878F";
                        else BgCol = "#E6E6B8";
                    }
                    if (AddWithStyleAsStandAlone)
                    return string.Format("style=\"background-color:{0};\"", BgCol);
                    return string.Format("background-color:{0};", BgCol);
                }
            }
            public class ExtractData
            {
                public string ColumnValueFromCurrRow(DataRow DtRow, string RequestedColName)
               {
                    return "";
                }
                public string DataRows_ColumnToString(DataRow Data_RowToActOn, string keyColName)
                {
                    var tmp = Data_RowToActOn[keyColName];
                    return Data_RowToActOn[keyColName].ToString();

                }
                public int DataRowToInt(DataRow Data_RowToActOn, string keyColName)
                {
                    string tmp = Data_RowToActOn[keyColName].ToString();
                    return Convert.ToInt32(tmp);

                }
                public bool CurrColumnIs(DataColumn Data_RowToQuestion, string ColumnName)
                {
                    string tmp = Data_RowToQuestion.ToString();
                    return tmp == ColumnName;
                }
                public bool CurrRowIs(DataRow Data_RowToQuestion, string RowName, int CurrIndex)
                {
                    string ColsName = Data_RowToQuestion.Table.Columns[CurrIndex].ToString();
                    return ColsName == RowName;
                    //this is curent value - by index 

                    //string currentColumn = Data_RowToQuestion.ItemArray[CurrIndex].ToString();

                }
            }

        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13221925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档