GridView是个功能强大的控件,有时侯,我们用它来装载多行数据并编辑,最后再批量更新。在编辑时,很可能会需要在其中插入一些行用于添加新的数据,下面提供一个示例以演示实现的基本方法。
页面文件:
<formid="form1"runat="server">
<div>
<asp:GridViewID="GridView1"runat="server"AutoGenerateColumns="False"DataKeyNames="line"OnSelectedIndexChanging="GridView1_SelectedIndexChanging">
<Columns>
<asp:CommandFieldHeaderText="插入"SelectText="插入行"ShowSelectButton="True"/>
<asp:TemplateFieldHeaderText="yy">
<ItemTemplate>
<asp:TextBoxID="TextBox1"runat="server"Text='<%#DataBinder.Eval(Container.DataItem,"yy")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

</div>
</form>
代码文件:
//初始化数据
privatevoidBindData()

...{
DataTabledt=CreateTable();
DataRowdr=dt.NewRow();
dr["yy"]="hello";
dr["line"]=0;
dt.Rows.Add(dr);

GridView1.DataSource=dt.DefaultView;
GridView1.DataBind();
}
protectedvoidPage_Load(objectsender,EventArgse)

...{
if(!Page.IsPostBack)

...{
BindData();
}

}

//创建一个表
privateDataTableCreateTable()

...{
DataTabledt=newDataTable("mytable");

DataColumndc=newDataColumn("yy",System.Type.GetType("System.String"));
dt.Columns.Add(dc);

dc=newDataColumn("line",System.Type.GetType("System.Int32"));
dt.Columns.Add(dc);

returndt;
}

protectedvoidGridView1_SelectedIndexChanging(objectsender,GridViewSelectEventArgse)

...{
DataTabledt=CreateTable();
foreach(GridViewRowgvrinGridView1.Rows)

...{
if(e.NewSelectedIndex==int.Parse(GridView1.DataKeys[gvr.RowIndex][0].ToString()))//插入行的位置

...{
DataRowdr=dt.NewRow();
dr["yy"]="";
dr["line"]=e.NewSelectedIndex;
dt.Rows.Add(dr);

dr=dt.NewRow();
TextBoxtb=(TextBox)gvr.Cells[1].FindControl("TextBox1");
dr["yy"]=tb.Text;
dr["line"]=e.NewSelectedIndex+1;
dt.Rows.Add(dr);
}
elseif(e.NewSelectedIndex<int.Parse(GridView1.DataKeys[gvr.RowIndex][0].ToString()))//插入行之后

...{
DataRowdr=dt.NewRow();
TextBoxtb=(TextBox)gvr.Cells[1].FindControl("TextBox1");
dr["yy"]=tb.Text;
dr["line"]=int.Parse(GridView1.DataKeys[gvr.RowIndex][0].ToString())+1;
dt.Rows.Add(dr);
}
else//插入行之前

...{
DataRowdr=dt.NewRow();
TextBoxtb=(TextBox)gvr.Cells[1].FindControl("TextBox1");
dr["yy"]=tb.Text;
dr["line"]=GridView1.DataKeys[gvr.RowIndex][0].ToString();
dt.Rows.Add(dr);
}
}

//重新绑定
DataViewdv=dt.DefaultView;
dv.Sort="line";//指定排序字段
GridView1.DataSource=dv;
GridView1.DataBind();

}
页面文件:
<formid="form1"runat="server">
<div>
<asp:GridViewID="GridView1"runat="server"AutoGenerateColumns="False"DataKeyNames="line"OnSelectedIndexChanging="GridView1_SelectedIndexChanging">
<Columns>
<asp:CommandFieldHeaderText="插入"SelectText="插入行"ShowSelectButton="True"/>
<asp:TemplateFieldHeaderText="yy">
<ItemTemplate>
<asp:TextBoxID="TextBox1"runat="server"Text='<%#DataBinder.Eval(Container.DataItem,"yy")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
代码文件:
//初始化数据
privatevoidBindData()
...{
DataTabledt=CreateTable();
DataRowdr=dt.NewRow();
dr["yy"]="hello";
dr["line"]=0;
dt.Rows.Add(dr);
GridView1.DataSource=dt.DefaultView;
GridView1.DataBind();
}
protectedvoidPage_Load(objectsender,EventArgse)
...{
if(!Page.IsPostBack)
...{
BindData();
}
}
//创建一个表
privateDataTableCreateTable()
...{
DataTabledt=newDataTable("mytable");
DataColumndc=newDataColumn("yy",System.Type.GetType("System.String"));
dt.Columns.Add(dc);
dc=newDataColumn("line",System.Type.GetType("System.Int32"));
dt.Columns.Add(dc);
returndt;
}
protectedvoidGridView1_SelectedIndexChanging(objectsender,GridViewSelectEventArgse)
...{
DataTabledt=CreateTable();
foreach(GridViewRowgvrinGridView1.Rows)
...{
if(e.NewSelectedIndex==int.Parse(GridView1.DataKeys[gvr.RowIndex][0].ToString()))//插入行的位置
...{
DataRowdr=dt.NewRow();
dr["yy"]="";
dr["line"]=e.NewSelectedIndex;
dt.Rows.Add(dr);
dr=dt.NewRow();
TextBoxtb=(TextBox)gvr.Cells[1].FindControl("TextBox1");
dr["yy"]=tb.Text;
dr["line"]=e.NewSelectedIndex+1;
dt.Rows.Add(dr);
}
elseif(e.NewSelectedIndex<int.Parse(GridView1.DataKeys[gvr.RowIndex][0].ToString()))//插入行之后
...{
DataRowdr=dt.NewRow();
TextBoxtb=(TextBox)gvr.Cells[1].FindControl("TextBox1");
dr["yy"]=tb.Text;
dr["line"]=int.Parse(GridView1.DataKeys[gvr.RowIndex][0].ToString())+1;
dt.Rows.Add(dr);
}
else//插入行之前
...{
DataRowdr=dt.NewRow();
TextBoxtb=(TextBox)gvr.Cells[1].FindControl("TextBox1");
dr["yy"]=tb.Text;
dr["line"]=GridView1.DataKeys[gvr.RowIndex][0].ToString();
dt.Rows.Add(dr);
}
}
//重新绑定
DataViewdv=dt.DefaultView;
dv.Sort="line";//指定排序字段
GridView1.DataSource=dv;
GridView1.DataBind();
}
本文介绍了一个使用ASP.NET中GridView控件实现数据插入的方法。通过一个具体的示例展示了如何在GridView中插入新行,并更新数据源,保持数据的正确排序。
1536

被折叠的 条评论
为什么被折叠?



