读书人

怎么取得动态绑定的模板列的值

发布时间: 2012-06-07 15:05:14 作者: rapoo

如何取得动态绑定的模板列的值?
我的数据结构如下:
Calendar MonthHours projectNo subTeam1(Hours) subTeam2(Hours) subTeam3(Hours) .....subTeamn(Hours)
-------- -------- ----------- ------------ ----------- -----------
2012-05 160 6666 30 50 40 ...... 20
2012-06 176 6666 40 30 30 ...... 50
2012-07 168 6666 20 40 20 ...... 40
.......

List.Columns.Clear();

BoundField wpnobf = new BoundField();
wpnobf.DataField = "WPMonth";
wpnobf.HeaderText = "Calendar";
List.Columns.Add(wpnobf);

BoundField companyhoursbf = new BoundField();
companyhoursbf.DataField = "currentmonthhours";
companyhoursbf.HeaderText = "MonthHours";
List.Columns.Add(companyhoursbf);

dt = project.GetSubTeamName(wpNo);
foreach (DataRow dr in dt.Rows)
{
TemplateField subteamField = new TemplateField();
subteamField.ShowHeader = true;

subteamField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, dr[0].ToString(), dr[0].ToString());//添加的列标题

GridViewTemplate gvt = new GridViewTemplate(DataControlRowType.DataRow, dr[0].ToString(), dr[0].ToString());
subteamField.ItemTemplate = gvt;

List.Columns.Add(subteamField);
}

public class GridViewTemplate : ITemplate
{
public delegate void EventHandler(object sender, EventArgs e);
public event EventHandler eh;
private DataControlRowType templateType;
private string columnName;
private string controlID;

public GridViewTemplate(DataControlRowType type, string colname)
{
templateType = type;
columnName = colname;
}

public GridViewTemplate(DataControlRowType type, string controlID, string colname)
{
templateType = type;
this.controlID = controlID;
columnName = colname;
}

public void InstantiateIn(System.Web.UI.Control container)
{
switch (templateType)
{
case DataControlRowType.Header:
Literal lc = new Literal();
lc.Text = columnName;
lc.ID = controlID;
container.Controls.Add(lc);
break;

case DataControlRowType.DataRow://可以定义自己想显示的控件以及绑定事件
TextBox tb = new TextBox();
tb.ID = columnName;
tb.ID = controlID;
container.Controls.Add(tb);
break;
default:
break;


}
}
}

---------------------------------------------------
string subTeamName = string.Empty;
string monthlyHours = string.Empty;
for (int k = 3; k < this.List.Columns.Count; k++)
{
subTeamName = this.List.Columns[k].HeaderText;

for (int m = 0; m < this.List.Rows.Count; m++)
{
string calenar = this.List.Rows[m].Cells[0].Text;
monthlyHours = ((TextBox)this.List.Rows[m].FindControl(subTeamName)).Text;
}
}

这个为什么取不到绑定的TextBox中的值呢?

[解决办法]
采用Request.Form["text的name"]来获得吧,动态创建的控件,默认不保留状态,需要自己写LoadViewState和SaveViewState实现

读书人网 >C#

热点推荐