gridview如何增加空行?

haisheng 2009-01-15 11:39:28
在GridView中,添加一个空的行,然后让用户输入数据,最后保存。
请问,如何实现?
...全文
1737 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
空空 2011-12-31
  • 打赏
  • 举报
回复
DataTable dt = new DataTable();
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
this.GridView1.DataSource = dt.DefaultView;
this.GridView1.DataBind();
wujialongcn 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liujialei7273 的回复:]
EditTemp里写呗
这个不是最基本的东东么,网上很多很多。。。
[/Quote]
那个要重新读取数据库,重新绑定,资源消耗有点大
yangzhangyu832 2009-01-22
  • 打赏
  • 举报
回复
学习。。顶
readfuture 2009-01-22
  • 打赏
  • 举报
回复
这个我看行:
http://www.cnblogs.com/lgzh3/archive/2008/10/23/1318119.html
yangzhangyu832 2009-01-22
  • 打赏
  • 举报
回复
学习。。顶
malin2670372 2009-01-22
  • 打赏
  • 举报
回复
楼上的代码很详细。
我的是添加在FOOLTER中做的......
你也可以。像你的可以用你的新增去控制FOOLTER的显示......
lambober 2009-01-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liujialei7273 的回复:]
EditTemp里写呗
这个不是最基本的东东么,网上很多很多。。。
[/Quote]

坐着看
haisheng 2009-01-22
  • 打赏
  • 举报
回复
有比较通用的代码吗?
cc87654321 2009-01-21
  • 打赏
  • 举报
回复
ascx.cs
public partial class Alarm_AlarmNoticeAdd : PageBase
{
Troika.Gps.BLL.Alarm_NoticeSet_Detail bll = new Troika.Gps.BLL.Alarm_NoticeSet_Detail();
//public string gEditIndex = "aaa";

protected void Page_Load(object sender, EventArgs e)
{
Ajax.Utility.RegisterTypeForAjax(typeof(Alarm_AlarmNoticeAdd));
if (!Page.IsPostBack)
{
this.btnButton.Attributes.Add("onclick", "return check(this.form)");
//获取表结构
ViewState["ds"] = bll.GetList(" NoticeSetID=0") ;
BindGrid();
}
}
////获取datagrid的EditIndex
//[Ajax.AjaxMethod()]
//public string GetEditIndex()
//{
// return gEditIndex;
//}

/// <summary>
/// 绑定数据源
/// </summary>

public void BindGrid()
{
DataView dv = ((DataSet)ViewState["ds"]).Tables[0].DefaultView;
if (dv.Count < 1)
{
addRow();
}
else
{
dv.Sort = "SetDetailID";
DataGrid.DataSource = dv;
DataGrid.DataBind();
}
}

/// <summary>
/// 删除
/// </summary>
public void DataGrid_Delete(object sender, DataGridCommandEventArgs e)
{
string id = DataGrid.DataKeys[(int)e.Item.ItemIndex].ToString();
DataSet ds = ((DataSet)ViewState["ds"]);
ds.Tables[0].Rows[(int)e.Item.ItemIndex].Delete() ;
ds.Tables[0].AcceptChanges();
ViewState["ds"] = ds;
BindGrid();
}

/// <summary>
/// 添加
/// </summary>
protected void add_Click(object sender, System.EventArgs e)
{
addRow();
}

//增加一个空行
public void addRow()
{
DataRow newRow;
int count = 0;
DataSet ds = ((DataSet)ViewState["ds"]);
if (ds != null)
{
DataView dv = ds.Tables[0].DefaultView;
count = ds.Tables[0].Rows.Count;
if (count > 0)
{
if (ds.Tables[0].Rows[count-1]["NoticeMan"].ToString().Equals(""))
{

DataGrid.DataSource = dv;
DataGrid.EditItemIndex = count - 1;
DataGrid.DataBind();
ViewState["ds"] = ds;
return;
}
}
count = ds.Tables[0].Rows.Count + 1;

newRow = ds.Tables[0].NewRow();
newRow["SetDetailID"] = count;
newRow["NoticeMan"] = "";
newRow["UnitName"] = "";
newRow["PhoneNum"] = "";
newRow["NoticeType"] = 0;
ds.Tables[0].Rows.Add(newRow);
dv = ds.Tables[0].DefaultView;
dv.Sort = "SetDetailID";
DataGrid.DataSource = dv;
DataGrid.EditItemIndex = count - 1;
DataGrid.DataBind();
ViewState["ds"] = ds;
}
}

/// <summary>
/// 修改
/// </summary>
public void DataGrid_Edit(object sender, DataGridCommandEventArgs e)
{
DataGrid.EditItemIndex = e.Item.ItemIndex;
// gEditIndex = e.Item.ItemIndex.ToString();
BindGrid();
}

/// <summary>
/// 取消
/// </summary>
public void DataGrid_Cancel(object sender, DataGridCommandEventArgs e)
{
DataGrid.EditItemIndex = -1;
BindGrid();
}


/// <summary>
/// 更新
/// </summary>
public void DataGrid_Update(object sender, DataGridCommandEventArgs e)
{
string strErr;
TextBox EditText = null;
//取得当前行
int row = Convert.ToInt32(e.Item.ItemIndex);
//获取当前的主键
int SetDetailID = Convert.ToInt32(DataGrid.DataKeys[row]);

ExtendWebControls.DropDownListExtend ctr = (ExtendWebControls.DropDownListExtend)e.Item.FindControl("DropDownListExtend1");
string NoticeMan = ctr.Text;
////验证通知人
//if (NoticeMan.Equals(""))
//{
// strErr = "通知人不能为空";
// MagicAjax.AjaxCallHelper.Write("alert('" + strErr + "');");
// //需要重新绑定
// BindGrid();
// return;
//}
EditText = (TextBox)e.Item.FindControl("txtUnitName");
string UnitName = EditText.Text;
////验证所属单位
//if (UnitName.Equals(""))
//{
// strErr = "所属单位不能为空";
// MagicAjax.AjaxCallHelper.Write("alert('" + strErr + "');");
// //需要重新绑定
// BindGrid();
// return;
//}
EditText = (TextBox)e.Item.FindControl("txtPhoneNum");
string PhoneNum = EditText.Text;
CheckBoxList list = (CheckBoxList)e.Item.FindControl("cblNoticeType");
int NoticeType = 0;
if (list.Items[0].Selected == true && list.Items[1].Selected == true)
{
NoticeType = 3;
}

else if (list.Items[0].Selected == true)
{
NoticeType = 1;
}
else if (list.Items[1].Selected == true)
{
NoticeType = 2;
}

////验证通知方式
//if (NoticeType==0)
//{
// strErr = "通知方式不能为空";
// MagicAjax.AjaxCallHelper.Write("alert('" + strErr + "');");
// //需要重新绑定
// BindGrid();
// return;
//}

//用户帐号,在HASHTABLE的值里面去找
ctr.Values = GetUserToHashTable(Session["UnitID"].ToString());

string NoticeAccount = "";

Hashtable hashtable = ctr.Values;
foreach (DictionaryEntry de in hashtable)
{
string temp = de.Key.ToString();
string[] tempary = temp.Split(',');
if (tempary[1].Equals(NoticeMan))
{
NoticeAccount = tempary[0];
break;
}
}

DataSet ds = (DataSet)ViewState["ds"];

//这边判断,用户姓名不能重复
DataTable dt = ds.Tables[0];
bool flag = true;
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i]["NoticeMan"].ToString().Equals(NoticeMan) && row!=i)
{
flag = false;
break;
}
}

if (flag)
{
DataRow updateRow = ds.Tables[0].Rows[row];
updateRow["NoticeAccount"] = NoticeAccount;
updateRow["NoticeMan"] = NoticeMan;
updateRow["UnitName"] = UnitName;
updateRow["PhoneNum"] = PhoneNum;
updateRow["NoticeType"] = NoticeType;
ds.Tables[0].Rows[row].AcceptChanges();
ViewState["ds"] = ds;
addRow();
}
else
{
strErr = "更新失败,用户名不能重复";
MagicAjax.AjaxCallHelper.Write("alert('" + strErr + "');");
}
}


}
cc87654321 2009-01-21
  • 打赏
  • 举报
回复
<table width="96%" border="0" align="center" cellpadding="0" cellspacing="0" >
<tr >
<td width="100%" height="40"><asp:Button ID="btnAdd" runat="server" Text=" 增加通知人" OnClick="add_Click" SkinID="btn_add_4" /></td>
</tr>
<tr>
<td width="100%"><asp:DataGrid ID="DataGrid" runat="server" CssClass="tb_style" Width="100%" DataKeyField="SetDetailID" OnDeleteCommand="DataGrid_Delete" OnEditCommand="DataGrid_Edit" OnUpdateCommand="DataGrid_Update" OnCancelCommand="DataGrid_Cancel" AllowSorting="true" AutoGenerateColumns="false" OnItemDataBound="DataGrid_ItemDataBound" >
<HeaderStyle CssClass="tb_title" Font-Bold="true" />

<Columns>
<asp:BoundColumn ReadOnly="True" HeaderText="序号" ItemStyle-Width="6%" HeaderStyle-Font-Bold="true" />
<asp:TemplateColumn HeaderText="通知人" ItemStyle-Width="13%" HeaderStyle-Font-Bold="true" >
<ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "NoticeMan")%> </ItemTemplate>
<EditItemTemplate>
<cc1:DropDownListExtend ID="DropDownListExtend1" MaxLength="20" runat="server"></cc1:DropDownListExtend>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="所属单位" ItemStyle-Width="28%" HeaderStyle-Font-Bold="true" >
<ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "UnitName")%> </ItemTemplate>
<EditItemTemplate>
<asp:TextBox Width="215" ID="txtUnitName" MaxLength="50" Text='<%# DataBinder.Eval(Container.DataItem,"UnitName") %>'
runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="电话号码" ItemStyle-Width="15%" HeaderStyle-Font-Bold="true" >
<ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "PhoneNum")%> </ItemTemplate>
<EditItemTemplate>
<asp:TextBox Width="120" ID="txtPhoneNum" MaxLength="15" Text='<%# DataBinder.Eval(Container.DataItem,"PhoneNum") %>'
runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="通知方式" ItemStyle-Width="20%" HeaderStyle-Font-Bold="true" >
<ItemTemplate>
<input name="hidden" type="hidden" id="hidNoticeType" value='<%#DataBinder.Eval(Container.DataItem,"NoticeType")%>' runat="server"/>
<asp:CheckBoxList runat="server" ID="cblNoticeType" RepeatDirection="Horizontal">
<asp:ListItem Value="1">系统提示</asp:ListItem>
<asp:ListItem Value="2">短信提示</asp:ListItem>
</asp:CheckBoxList>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="操作" ItemStyle-Width="11%" HeaderStyle-Font-Bold="true" >
<ItemTemplate>
<asp:ImageButton CommandName="Edit" ImageUrl="~/images/edit.jpg" AlternateText="编辑"
CausesValidation="false" runat="server" ID="Imagebutton1" />
<asp:ImageButton CommandName="Delete" ImageUrl="~/images/delete.jpg" AlternateText="删除"
CausesValidation="false" runat="server" ID="ImagebuttonDel" />
</ItemTemplate>
<EditItemTemplate>
<asp:ImageButton CommandName="Update" ImageUrl="~/images/save.jpg" AlternateText="保存"
CausesValidation="false" runat="server" ID="Imagebutton3" />
<asp:ImageButton CommandName="Cancel" ImageUrl="~/images/cancel.jpg" AlternateText="取消"
CausesValidation="false" runat="server" ID="Imagebutton2" />
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</td>
</tr>
</table>
haisheng 2009-01-21
  • 打赏
  • 举报
回复
谁有代码?上面的代码根本不能输入,不知如何保存,代码很怪异。
haisheng 2009-01-20
  • 打赏
  • 举报
回复
没解决,还是不知如何解决。

gridview外有两个按钮,一个新增,一个保存。ShowFooter为true。
请问,如何实现?最好有代码,谢谢!
Jack123 2009-01-20
  • 打赏
  • 举报
回复
<FooterTemplate>
Adechen 2009-01-15
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20081207/14/65a7da2e-9255-43cc-b819-75bc67e4d753.html
hack8 2009-01-15
  • 打赏
  • 举报
回复
搜索一下,有现成的。
bdhwjs 2009-01-15
  • 打赏
  • 举报
回复
可以动态添加Footer
单击添加就把GridView的ShowFooter属性设置为true。
单击保存就把GridView的ShowFooter属性设置为false。
效果很不错,LZ试试~~
PCI_E 2009-01-15
  • 打赏
  • 举报
回复
Grid不是要绑定DataTable吗,在DataTable里AddNew一个新行就好了。
浮生若梦丶 2009-01-15
  • 打赏
  • 举报
回复
这个问题我记得csdn里面问题n多次了,在csdn里面搜一下有很多解答
takako_mu 2009-01-15
  • 打赏
  • 举报
回复
在Gridview外面重新弄一行,也是可以的,還很美觀。
加载更多回复(9)
一、表头表尾 1、自定义多行表头,列合并,行合并 2、删除表身指定列、行 3、固定表头,向下拉动滚动条时,表头固定不动 4、表脚行统计,总计、平均值 二、导入导出 1、导出Excel,Word 2、导入Excel 三、多层嵌套 1、在父GridView中的编辑模板中嵌套一个子GridView 2、三层GridView嵌套 四、分页排序 1、分页 2、列排序,点击列升序、降序排序 五、结合控件 1、CheckBox控件,多选、全选 2、DropDownList控件 3、隐藏控件,当选择处理状态选中备注时,隐藏textbox显示 4、radio控件,选中获取GridView表主键 5、GridView中DropDownList绑定数据,直接绑定显示,无需点击编辑按纽。 6、JavaScript操作checbox实现全选,多选 六、设置属性 1、JavaScript设置GridView行的背景颜色,单偶行的背景颜色,鼠标停留行背景,鼠标选中时的行背景 2、GridView的JavaScript中的行单击,双击、删除提示框、快捷键事件 3、GridView设置属性,单元格文本颜色,单元格背景颜色,表中增加空行 七、无代码 GridView排序、发送邮件、点击行查看详情,内容过长截取 八、选增删改 1、GridView自带的选中、编辑、删除,即CommandField 2、GridView添加记录,在GridView表脚添加控件,用添加记录 3、更新所有记录,GridView直接绑定控件,然后更新 九、主键索引 根据主键多条记录删除,单条记录删除。

62,269

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧