一:基本
<asp:TemplateColumn>
<ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"对应字段名")%>'/>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList runat="server" DataSource='<%# ds.Tables[""].DefaultView%>' SelectIndex='<GetSelectIndex2((string)DataBinder.Eval(Container.DataItem,"根据这个字段名获取DropDownList的index属性"))%>'>
<asp:ListItem value="aaaa">aaaa</asp:ListItem>
<asp:ListItem value="bbbb">bbbb</asp:ListItem>
<asp:ListItem value="cccc">cccc</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="标题" SortExpression="对应字段名">
<ItemTemplate>
//平常状态时套用的的模板
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"对应字段名")%>'/>
</ItemTemplate>
<EditItemTemplate>
//编辑模式下套用的模板
<asp:TextBox runat="server" id="" Text='<%# DataBinder.Eval(Container.DataItem,"对应字段名")%>'/>
<asp:RequiredFieldValidator id="" runat="server"/>
//可添加大量你喜欢的控件
</EditItemTemplate>
</asp:TemplateColumn>
<ItemTemplate>
//平常状态时套用的的模板
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"对应字段名")%>'/>
</ItemTemplate>
<EditItemTemplate>
//编辑模式下套用的模板
<asp:TextBox runat="server" id="" Text='<%# DataBinder.Eval(Container.DataItem,"对应字段名")%>'/>
<asp:RequiredFieldValidator id="" runat="server"/>
//可添加大量你喜欢的控件
</EditItemTemplate>
</asp:TemplateColumn>
<%%> 服务器代码标识符 # 数据绑定的符号
DataGrid的中的一行称为一个DataGridItem,每个DataGridItem包含一个隐藏的GridItemIndex属性,记录DataGridItem的索引值,从0开始;另外每个DataGridItem还包含一个隐藏的DataItem属性,其中包含一个参考指向数据源中对应的一条数据
在<asp:BoundColumn HeaderText="" DataField="" ReadOnly=true></asp:BoundColumn> 设为ReadOnly在编加模式下可以只读显示
二:在DataGrid中添加DropDownList
<asp:TemplateColumn>
<ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"对应字段名")%>'/>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList runat="server" DataSource='<%# ds.Tables[""].DefaultView%>' DataTextField="" DataValueField="" SelectIndex='<GetSelectIndex((string)DataBinder.Eval(Container.DataItem,"根据这个字段名获取DropDownList的index属性"))%>'/>
</EditItemTemplate>
<ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"对应字段名")%>'/>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList runat="server" DataSource='<%# ds.Tables[""].DefaultView%>' DataTextField="" DataValueField="" SelectIndex='<GetSelectIndex((string)DataBinder.Eval(Container.DataItem,"根据这个字段名获取DropDownList的index属性"))%>'/>
</EditItemTemplate>
public int GetSelectIndex(string str)
{
//这样的一个缺点是 DropDownList可能取重复的值,但有时是必要的,所以另一个静态声明方法
//而且传入的参数那列必须是唯一值,如果有重复值的话,index就会只取前面的
int i = 0;
if(str!=null)
{
foreach(DataRow classroom in ds.Tables["UserInfo"].Rows)
{
if(str==classroom["UserName"].ToString())
{
break;
}
i=i+1;
}
}
return i;
}
{
//这样的一个缺点是 DropDownList可能取重复的值,但有时是必要的,所以另一个静态声明方法
//而且传入的参数那列必须是唯一值,如果有重复值的话,index就会只取前面的
int i = 0;
if(str!=null)
{
foreach(DataRow classroom in ds.Tables["UserInfo"].Rows)
{
if(str==classroom["UserName"].ToString())
{
break;
}
i=i+1;
}
}
return i;
}
这里是静态绑定DropDownList数据源,取索引略去。
<asp:TemplateColumn>
<ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"对应字段名")%>'/>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList runat="server" DataSource='<%# ds.Tables[""].DefaultView%>' SelectIndex='<GetSelectIndex2((string)DataBinder.Eval(Container.DataItem,"根据这个字段名获取DropDownList的index属性"))%>'>
<asp:ListItem value="aaaa">aaaa</asp:ListItem>
<asp:ListItem value="bbbb">bbbb</asp:ListItem>
<asp:ListItem value="cccc">cccc</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
在Item_Create中添加代码:
DataGrid Item Create#region DataGrid Item Create
public void DataGrid_ItemCreate(objectsender,System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onclick","javascript:return CG(this);");//单击改变颜色
}
}
#endregion
public void DataGrid_ItemCreate(objectsender,System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onclick","javascript:return CG(this);");//单击改变颜色
}
}
#endregion
客户端代码:(javascript):
<script language=javascript>
function CG(obj)
{
var Curr_TR=document.all.tags("tr");
for(var i=1;i<Curr_TR.length;i++)
{
Curr_TR[i].Style.backgroundColor="white";
}
if(obj.style.backgroundColor="yellow")
{
obj.style.backgroundColor="white";
}
else
{
obj.style.backgroundColor="yellow";
}
}
</script>
function CG(obj)
{
var Curr_TR=document.all.tags("tr");
for(var i=1;i<Curr_TR.length;i++)
{
Curr_TR[i].Style.backgroundColor="white";
}
if(obj.style.backgroundColor="yellow")
{
obj.style.backgroundColor="white";
}
else
{
obj.style.backgroundColor="yellow";
}
}
</script>
四:隐藏显示列
隐藏和显示DataGrid列的操作#region 隐藏和显示DataGrid列的操作
//取得DataGrid的列名并赋给DropDownList
private void FillDropGrid(DataGrid dg)
{
foreach(DataGridColumn col in dg.Columns)
{
//如果不排除这些,在选中这些列时会触发事件,暂时没有理解
if(col.HeaderText=="删除"||col.HeaderText=="编辑"||col.HeaderText=="修改")
{
return;
}
else
{
DropGrid.Items.Add(col.HeaderText);
}
}
}
//根据传入的列名隐藏显示一列
private void HideDataGridColumn(int index,bool show)
{
DGridUnit.Columns[index].Visible=show;
}
//显示全部列
private void showAll(DataGrid dg)
{
foreach(DataGridColumn col in dg.Columns)
{
col.Visible=true;
}
}
//窗体装载的时候填充,DropDown的load事件
private void DropGrid_Load(object sender, System.EventArgs e)
{
this.FillDropGrid(DGridUnit);
}
//隐藏按钮事件
private void BtnHide_Click(object sender, System.EventArgs e)
{
this.HideDataGridColumn(DropGrid.SelectedIndex,false);
this.BindGrid();
}
//显示按钮事件
private void BtnShowOne_Click(object sender, System.EventArgs e)
{
this.HideDataGridColumn(DropGrid.SelectedIndex,true);
this.BindGrid();
}
//全部显示
private void BtnShowAll_Click(object sender, System.EventArgs e)
{
this.showAll(DGridUnit);
this.BindGrid();
}
#endregion
//取得DataGrid的列名并赋给DropDownList
private void FillDropGrid(DataGrid dg)
{
foreach(DataGridColumn col in dg.Columns)
{
//如果不排除这些,在选中这些列时会触发事件,暂时没有理解
if(col.HeaderText=="删除"||col.HeaderText=="编辑"||col.HeaderText=="修改")
{
return;
}
else
{
DropGrid.Items.Add(col.HeaderText);
}
}
}
//根据传入的列名隐藏显示一列
private void HideDataGridColumn(int index,bool show)
{
DGridUnit.Columns[index].Visible=show;
}
//显示全部列
private void showAll(DataGrid dg)
{
foreach(DataGridColumn col in dg.Columns)
{
col.Visible=true;
}
}
//窗体装载的时候填充,DropDown的load事件
private void DropGrid_Load(object sender, System.EventArgs e)
{
this.FillDropGrid(DGridUnit);
}
//隐藏按钮事件
private void BtnHide_Click(object sender, System.EventArgs e)
{
this.HideDataGridColumn(DropGrid.SelectedIndex,false);
this.BindGrid();
}
//显示按钮事件
private void BtnShowOne_Click(object sender, System.EventArgs e)
{
this.HideDataGridColumn(DropGrid.SelectedIndex,true);
this.BindGrid();
}
//全部显示
private void BtnShowAll_Click(object sender, System.EventArgs e)
{
this.showAll(DGridUnit);
this.BindGrid();
}
#endregion
四:动态添加列,删除列
BoundColumn col = new BoundColumn();
col.HeaderText="标题";
col.DataField="绑定数据列";
DataGrid1.Columns.Add(col);
DataGrid1.Columns.Remove(col);
col.HeaderText="标题";
col.DataField="绑定数据列";
DataGrid1.Columns.Add(col);
DataGrid1.Columns.Remove(col);