方法一
在RowCreated中判断
public class GridViewHelper
{
GridView gv = null;
string RedirtPageName = String.Empty;
/// <summary>
/// 用于跳转页面,并隐藏主键列,注意使用的时候DataTable需要有以“ID”为名字的列
/// </summary>
/// <param name="RedirtPageName"></param>
/// <param name="gv"></param>
public GridViewHelper(string RedirtPageName,GridView gv)
{
this.gv = gv;
this.RedirtPageName= RedirtPageName;
gv.DataKeyNames = new string[] { "ID" };//在生成DataTable列的时候要有ID为名的列
gv.RowCreated += GridView1_RowCreated;
gv.RowEditing += GridView1_RowEditing;
}
/// <summary>
/// 实现隐藏主键列(Guid型数据)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow ||
e.Row.RowType == DataControlRowType.Header)
{
e.Row.Cells[1].Visible = false; //如果想使第1列不可见,则将它的可见性设为false
}
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
try
{
if (e.NewEditIndex < 0) return;
HttpContext.Current.Response.Redirect(RedirtPageName + "?id=" + gv.DataKeys[e.NewEditIndex]["ID"],false);//这里需要false
}
catch (Exception ex)
{
//ScriptManager.RegisterStartupScript(this, this.GetType(), null, "alert('" + ex.Message + "');", true);
throw new Exception(ex.Message);
}
}
}
调用: new GridViewHelper("WebCCTDeviceInfoUpdate.aspx", GridView1);
方法二
在前台绑定:
<asp:GridView ID="GridView1" DataKeyNames="ID" runat="server"
AutoGenerateColumns="False" onrowediting="GridView1_RowEditing">
<Columns>
<asp:CommandField ShowEditButton="True" EditText="编辑">
<ItemStyle Width="100px" />
</asp:CommandField>
<asp:TemplateField HeaderText="OrgName">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#Eval("Org Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%#Eval("Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
if (!IsPostBack)
{
LoadData();
LanguageHelper.UpdateViewText(LanguageHelper.GetWebFormName(this), this);
}
private void LoadData()
{
try
{
MethodResult result;
List<EXS_DistrictInfoFull> list;
result = Prj.DataProvider.DistrictInfo.LoadDataByOrgName(out list, ddlOrgName.Text);
if (result.Fail)
{
ScriptManager.RegisterStartupScript(this, this.GetType(), null, "alert('" + result.FullMsg + "');", true);
return;
}
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Org Name");
dt.Columns.Add("Name");
int i;
foreach (var item in list)
{
DataRow dr = dt.NewRow();
i = 0;
dr[i++] = item.EXS_DistrictInfo.DisI_ID;
dr[i++] = item.EXS_OrganizationInfo.OrgI_Name;
dr[i++] = item.EXS_DistrictInfo.DisI_Name;
dt.Rows.Add(dr);
}
GridView1.DataSource = dt;
GridView1.DataBind();
}
catch (Exception ex)
{
ScriptManager.RegisterStartupScript(this, this.GetType(), null, "alert('" + ex.Message + "');", true);
}
}
取主键的值GridView1.DataKeys[e.NewEditIndex]["ID"]
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
try
{
if (e.NewEditIndex < 0) return;
Response.Redirect("WebDistrictInfoUpdate.aspx" + "?id=" + GridView1.DataKeys[e.NewEditIndex]["ID"], false);
}
catch (Exception ex)
{
ScriptManager.RegisterStartupScript(this, this.GetType(), null, "alert('" + ex.Message + "');", true);
}
}