对未知数量的行实现读写的最佳方法

时间:2010-01-18 19:08:15

标签: asp.net linq-to-sql

我同样问了一个问题,但结果非常混乱,我遇到了困难,所以我试图从另一个角度来看: Question concerning asp:listview and multiple dynamically created controls

我有一个表存储流程中的步骤。有些公司只有6个步骤而有些公司有15个步骤,因此我创建了一个包含15个不同插槽的表格。我想要做的是设置一个控件,在它自己的行中显示每个步骤,旁边有一个标签,表示“Step'#'”,而不是在相邻的列中。我也希望它不显示任何空白行。如果他们正在输入步骤说明,我希望他们必须按一个会添加一行的按钮,这样他们就不会只给出15个空文本框来填写。

进行此操作的最佳控件是什么?如何开始设置?

1 个答案:

答案 0 :(得分:2)

您将数据放在表格中的字段名称中,这使您的任务更加复杂。而不是将步骤存储在列中,如下所示:

CompanyId  Step1  Step2  Step3  Step4  Step5  Step 6  Step7 ...
1          alpha  beta   gamma
2          one    two    three  four   five

您应该将步骤存储为行,以便在步骤中将步骤编号作为数据:

CompanyId  StepNumber  Step
1          1           alpha
1          2           beta
1          3           gamma
2          1           one
2          2           two
2          3           three
2          4           four
2          5           five

这样您就不会获得任何未使用的字段,并且数据模型不会对步骤数量造成任何限制。此外,您可以轻松地将这些步骤作为集合,而不必单独获取每个步骤并添加到集合中。

类似的东西:

var steps =
  from s in CompanySteps
  where s.CompanyId = 2
  orderby s.StepNumber
  select new { s.StepNumber, s.Step };

然后你有很多不同的选项来显示这些步骤,比如在Repeater中使用集合作为数据源,或者遍历这些项目,只需为它们创建HTML代码并放入Literal控件。