使用C#在ASP.NET中选择动态创建的表行

时间:2015-09-24 15:14:12

标签: c# asp.net dynamically-generated

我正在使用C#和ASP.NET在Visual Studio 2015 pro中编写Web应用程序。现在,我已经设置了用户单击按钮的位置,C#代码将获取一堆数据,然后将其显示回表中的用户。我花了一天的时间试图弄清楚如何将某种形式的可点击事件添加到表行但却没有成功。最后,我想要做的是在单击表格行时在我的C#代码中调用一个方法并将其发送给行索引。

以下是我用于生成表格的C#代码:

    protected void searchButton_Click(object sender, EventArgs e)
    {
        try
        {
            // Remove the error display
            resultListLabel.Style.Add("Display", "None");

            // Get document groups 
            groups = TableCommands.getGroups(dbConn, "retriever", searchTextOne.Text, searchTextTwo.Text);

            foreach (var dataPair in groups)
            {                    
                // Get data pair group names into list
                List<string> name = dataPair.Key.Split('|').ToList();

                // ====== Make table
                Table resultTable = new Table();
                resultTable.Attributes["class"] = "displayTable";
                resultList.Controls.Add(resultTable);

                // ====== Add table info row
                TableRow groupInfo = new TableRow();
                groupInfo.Attributes["class"] = "groupInfoLabel";

                // add row to table
                resultTable.Rows.Add(groupInfo);                    

                // create cell with information
                TableCell infoCell = new TableCell();
                infoCell.Text = "MRN: "+name[0]+", Name: " + name[1];
                infoCell.ColumnSpan = 3;

                // add cell to row
                groupInfo.Cells.Add(infoCell);

                // ====== Make column label row
                TableRow labelRow = new TableRow();
                labelRow.Attributes["class"] = "columnLabel";

                // add row to table
                resultTable.Rows.Add(labelRow);

                // make an array of column lables
                string[] cellNames = new string[] { "Visit Date", "Document Type", "Doctor ID" };

                // add column lables to row
                foreach (string s in cellNames)
                {
                    TableCell labelCell = new TableCell();
                    labelCell.Text = s;
                    labelRow.Cells.Add(labelCell);
                }

                // Add display names to table
                foreach(var nameList in dataPair.Value)
                {
                    TableRow nameRow = new TableRow();
                    nameRow.Attributes["class"] = "columnInfo";


                    for (int i = 0; i < 3; i++)
                    {
                        TableCell nameCell = new TableCell();
                        nameCell.Text = nameList[i];
                        nameRow.Cells.Add(nameCell);
                    }
                    resultTable.Rows.Add(nameRow);
                }                    
            }       

        }
        catch(Exception ex)
        {
            // Display the error and write to log
            resultListLabel.Style.Add("Display", "Inline-Block");
            writeLog("Failed to generate tables", ex.ToString());
        }

    }

1 个答案:

答案 0 :(得分:0)

这是我必须做的事情:

  1. 将一个全局布尔值添加到名为tableCall的C#代码
  2. 将searchButton_Click中的代码移动到Page_Load方法中的if(tableCall)语句中。

    protected void Page_Load(object sender ,EventArgs e){
        ...
        if(tableCall){
            //Do stuff from searchButton_Click
        }
        ...
    }
    
  3. 添加tableCall = true;和Page_Load(发件人,e)到searchButton_Click
  4. 修改for循环以在单元格中添加按钮,如下所示:         //向表中添加显示名称         foreach(dataPair.Value中的var nameList)         {             TableRow nameRow = new TableRow();             nameRow.Attributes [&#34; class&#34;] =&#34; columnInfo&#34 ;;

    // Add display names to table
    foreach (var nameList in dataPair.Value)
    {
        TableRow nameRow = new TableRow();
        nameRow.Attributes["class"] = "columnInfo";
    
        for (int i = 0; i < 3; i++)
        {
            TableCell nameCell = new TableCell();
            nameRow.Cells.Add(nameCell);
    
            Button b = new Button();
            b.Attributes["class"] = "docButton";
            b.Attributes.Add("DWdocid", nameList[3]);
            b.Text = nameList[i];
            b.Click += new EventHandler((s, ea) => test(s, ea, b.Attributes["DWdocid"]));
    
            nameCell.Controls.Add(b);
        }
        resultTable.Rows.Add(nameRow);
    }
    
  5. 这会为行中的三个单元格中的每一个添加一个按钮,但会为该行中的每个按钮添加相同的文档ID,因此用户在该行上单击的任何位置(1px边框除外)都将调用C#代码中的方法,同时传递文档ID。我确信有了更好的CSS技能,有人可以让按钮跨越所有三个单元格。