Protected Sub bindAssessmentGrid(ByVal mode As ListItemType) Dim selectColumn As New DataColumn Dim _dimensionId As Integer _dtDimensionAssessment = _objAssessmentBLL.GetYearLevelAssessment(Me.ucAppPageHeader.YearSemesterId, _ Me.ucAppPageHeader.HomeGroupId, Me.ucAppPageHeader.DomainId, _ Me.ucAppPageHeader.AssessorId, Me.ucAppPageHeader.YearLevelId) 'If there are no records for students hide the Assessment panel and exit sub If _dtDimensionAssessment.Rows.Count = 0 Then Me.AssessmentPanel.Visible = False Exit Sub Else Me.AssessmentPanel.Visible = True End If If mode = ListItemType.Item Then 'Clears all columns from grid only for Item mode gvDimensionAssessment.Columns.Clear() 'Adds a select checkbox to the datatable, sets it's caption, 'and ordinal position to first in the grid but only in item template selectColumn = New DataColumn selectColumn.Caption = "Select" selectColumn.ColumnName = "Select" _dtDimensionAssessment.Columns.Add(selectColumn) selectColumn.SetOrdinal(0) End If 'Adds in the template column controls For Each _dCol In _dtDimensionAssessment.Columns Dim tf As New TemplateField 'Puts all fields into template except StudentId and any AchievementId fields If Left(_dCol.ColumnName, 5) <> "AchId" Then If _dCol.ColumnName = "Student" Then tf.ItemStyle.HorizontalAlign = HorizontalAlign.Left End If If InStr(_dCol.ColumnName, "_") <> 0 Then _dimensionId = CInt(Left(_dCol.ColumnName, InStr(_dCol.ColumnName, "_") - 1)) _dCol.ColumnName = Mid(_dCol.ColumnName, InStr(_dCol.ColumnName, "_") + 1) End If tf.ItemTemplate = New GridviewDimensionTemplate(ListItemType.Item, _ _dCol.ColumnName, _dCol.Caption, _dimensionId) If _dCol.ColumnName <> "StudentId" Then tf.EditItemTemplate = New GridviewDimensionTemplate(ListItemType.EditItem, _ _dCol.ColumnName, _dCol.Caption, _dimensionId) End If tf.HeaderTemplate = New GridviewDimensionTemplate(ListItemType.Header, _ _dCol.ColumnName, _dCol.Caption, _dimensionId) If _dCol.ColumnName = "StudentId" Then tf.Visible = False gvDimensionAssessment.Columns.Add(tf) End If Next 'Add Edit, update, Cancel command fields after all template 'fields are bound If mode = ListItemType.Item Then Dim cmdEdit As New ButtonField cmdEdit.ButtonType = ButtonType.Image gvDimensionAssessment.Columns.Add(cmdEdit) 'Enable global selectors as they may have been disabled after an edit mode call Me.DimensionsDropDownList.Enabled = True Me.cmdApply.Enabled = True Me.VELSScoreDropDownList.Enabled = True ElseIf mode = ListItemType.EditItem Then Dim cmdUpdate As New ButtonField cmdUpdate.ButtonType = ButtonType.Image gvDimensionAssessment.Columns.Add(cmdUpdate) Dim cmdCancel As New ButtonField cmdCancel.ButtonType = ButtonType.Image gvDimensionAssessment.Columns.Add(cmdCancel) 'Disable global selectors as they are not required in edit mode Me.DimensionsDropDownList.Enabled = False Me.cmdApply.Enabled = False Me.VELSScoreDropDownList.Enabled = False End If 'bind and display the data gvDimensionAssessment.DataSource = _dtDimensionAssessment gvDimensionAssessment.DataBind() End Sub
动态DataSet 实现,行列不固定,例子要示情况而言
.......不是自动生成列的问题啊,动态dateset,本来dateset就是动态的,我是一只紧张的小星星^_^你的代码是添加了动态模板列吧,但是不是只有一个列需要编辑阿. 说清楚点吧 数据取出来帮定到gridview是这样a b c d e f g h i j k假定 b d f h j 需要可以编辑,而另外的业务的表数据取出来是 1 2 3 4 5 6 7 8 9 10 11其中 5 7 9 11需要可以编辑 假如列数比较多,难道必须一个一个模版列去定义?而且写死了模版列多个业务就要用多个控件,业务多的话很不好用阿
Eddie005 多个报表如果一个一个设置太麻烦了,该如何实现呢?谢谢帮忙,太感谢了,可以加分。
Protected Sub bindAssessmentGrid(ByVal mode As ListItemType) Dim selectColumn As New DataColumn
Dim _dimensionId As Integer _dtDimensionAssessment = _objAssessmentBLL.GetYearLevelAssessment(Me.ucAppPageHeader.YearSemesterId, _
Me.ucAppPageHeader.HomeGroupId, Me.ucAppPageHeader.DomainId, _
Me.ucAppPageHeader.AssessorId, Me.ucAppPageHeader.YearLevelId) 'If there are no records for students hide the Assessment panel and exit sub
If _dtDimensionAssessment.Rows.Count = 0 Then
Me.AssessmentPanel.Visible = False
Exit Sub
Else
Me.AssessmentPanel.Visible = True
End If
If mode = ListItemType.Item Then 'Clears all columns from grid only for Item mode
gvDimensionAssessment.Columns.Clear() 'Adds a select checkbox to the datatable, sets it's caption,
'and ordinal position to first in the grid but only in item template
selectColumn = New DataColumn
selectColumn.Caption = "Select"
selectColumn.ColumnName = "Select"
_dtDimensionAssessment.Columns.Add(selectColumn)
selectColumn.SetOrdinal(0)
End If
'Adds in the template column controls
For Each _dCol In _dtDimensionAssessment.Columns
Dim tf As New TemplateField 'Puts all fields into template except StudentId and any AchievementId fields If Left(_dCol.ColumnName, 5) <> "AchId" Then If _dCol.ColumnName = "Student" Then
tf.ItemStyle.HorizontalAlign = HorizontalAlign.Left
End If If InStr(_dCol.ColumnName, "_") <> 0 Then
_dimensionId = CInt(Left(_dCol.ColumnName, InStr(_dCol.ColumnName, "_") - 1))
_dCol.ColumnName = Mid(_dCol.ColumnName, InStr(_dCol.ColumnName, "_") + 1)
End If tf.ItemTemplate = New GridviewDimensionTemplate(ListItemType.Item, _
_dCol.ColumnName, _dCol.Caption, _dimensionId) If _dCol.ColumnName <> "StudentId" Then
tf.EditItemTemplate = New GridviewDimensionTemplate(ListItemType.EditItem, _
_dCol.ColumnName, _dCol.Caption, _dimensionId)
End If tf.HeaderTemplate = New GridviewDimensionTemplate(ListItemType.Header, _
_dCol.ColumnName, _dCol.Caption, _dimensionId) If _dCol.ColumnName = "StudentId" Then tf.Visible = False
gvDimensionAssessment.Columns.Add(tf)
End If
Next 'Add Edit, update, Cancel command fields after all template
'fields are bound
If mode = ListItemType.Item Then Dim cmdEdit As New ButtonField
cmdEdit.ButtonType = ButtonType.Image
gvDimensionAssessment.Columns.Add(cmdEdit) 'Enable global selectors as they may have been disabled after an edit mode call
Me.DimensionsDropDownList.Enabled = True
Me.cmdApply.Enabled = True
Me.VELSScoreDropDownList.Enabled = True ElseIf mode = ListItemType.EditItem Then Dim cmdUpdate As New ButtonField
cmdUpdate.ButtonType = ButtonType.Image
gvDimensionAssessment.Columns.Add(cmdUpdate) Dim cmdCancel As New ButtonField
cmdCancel.ButtonType = ButtonType.Image
gvDimensionAssessment.Columns.Add(cmdCancel) 'Disable global selectors as they are not required in edit mode
Me.DimensionsDropDownList.Enabled = False
Me.cmdApply.Enabled = False
Me.VELSScoreDropDownList.Enabled = False
End If
'bind and display the data
gvDimensionAssessment.DataSource = _dtDimensionAssessment
gvDimensionAssessment.DataBind() End Sub
说清楚点吧
数据取出来帮定到gridview是这样a b c d e f g h i j k假定 b d f h j 需要可以编辑,而另外的业务的表数据取出来是
1 2 3 4 5 6 7 8 9 10 11其中 5 7 9 11需要可以编辑
假如列数比较多,难道必须一个一个模版列去定义?而且写死了模版列多个业务就要用多个控件,业务多的话很不好用阿
NEW一个TABLE
TableRow row = new TableRow();
Table1.Rows.Add(row);
TableCell column0 = new TableCell();
row.Cells.Add(column0);
column0.Text = Request.QueryString["initial"];
TableCell column1 = new TableCell();
row.Cells.Add(column1);
column1.Text = string.Empty;
for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
{
if (ds.Tables[0].Rows[j]["initial"].ToString() == column0.Text.ToString())
{
LinkButton lbt = new LinkButton();
column1.Controls.Add(lbt);
lbt.Font.Underline = false;
}
}
这样就可以拉,动态的行动态的列而且可以触发事件,条件可以自己改下,我说的是思路
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType ==DataControlRowType.DataRow||e.Row.RowType==DataControlRowType.Header)
{
for (int i = 0; i < e.Row.Cells.Count; i++)
{
//设置前两列不可选
if (i == 1 || i == 0)
{
e.Row.Cells[i].Enabled = false;
}
}
}
}