当前位置: 代码迷 >> ASP.NET >> gridview怎么增加空行
  详细解决方案

gridview怎么增加空行

热度:9638   发布时间:2013-02-25 00:00:00.0
gridview如何增加空行?
在GridView中,添加一个空的行,然后让用户输入数据,最后保存。
请问,如何实现?

------解决方案--------------------------------------------------------
动态地控制数据源datatable
新增一个空记录


------解决方案--------------------------------------------------------
Grid不是要绑定DataTable吗,在DataTable里AddNew一个新行就好了。
------解决方案--------------------------------------------------------
可以动态添加Footer
单击添加就把GridView的ShowFooter属性设置为true。
单击保存就把GridView的ShowFooter属性设置为false。
效果很不错,LZ试试~~
------解决方案--------------------------------------------------------
看2楼的回答
http://topic.csdn.net/u/20081207/14/65a7da2e-9255-43cc-b819-75bc67e4d753
------解决方案--------------------------------------------------------
http://topic.csdn.net/u/20081207/14/65a7da2e-9255-43cc-b819-75bc67e4d753
------解决方案--------------------------------------------------------
DataSet ds;
DataRow dr = ds.Tables[0].NewRow();
dr[0] = System.Int32.Parse("0");
dr[1] = "";
dr[2] = "";
ds.Tables[0].Rows.InsertAt(dr, 0);

Gridview1.DataSource = ds;
Gridview1.DataBind();
------解决方案--------------------------------------------------------
http://www.cnblogs.com/lgzh3/archive/2008/10/23/1318119
------解决方案--------------------------------------------------------
<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>
------解决方案--------------------------------------------------------
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 + "');");
}
}

 
}
------解决方案--------------------------------------------------------
这个我看行:
http://www.cnblogs.com/lgzh3/archive/2008/10/23/1318119