使用 Linq、实体模型、C# 更新网格视图行时出错
本文关键字:视图 网格 出错 更新 Linq 实体模型 使用 | 更新日期: 2023-09-27 18:33:50
嗨,提前感谢,
我正在尝试在我的网格视图中进行内联编辑,但不断收到此错误:
我Sys.WebForms.PageRequestManagerServerErrorException: Object Reference 未设置为对象的实例。
之前有过这个工作,但后来我不得不添加一些修改,例如图像和做一些边界字段而不是 EditItemTemplate
Asp.net 前端
<asp:GridView ID="GridViewRangeSetup" runat="server" AllowSorting="True" OnSorting="Gridview_Sort"
PagerStyle-Mode="NumericPages" AutoGenerateColumns="false" Width="100%" CssClass="gridView"
OnPageIndexChanging="GridViewRangeSetup_PageIndexChanging" AllowPaging="True"
PageSize="20" DataKeyNames="RangeId" OnRowCommand="GridViewRangeSetup_RowCommand"
OnRowEditing="GridViewRangeSetup_RowEditing" OnRowCancelingEdit="GridViewRangeSetup_CancelEditRow"
OnRowUpdating="GridViewRangeSetup_UpdateRow" OnRowDataBound="GridViewRangeSetup_RowDataBound">
<RowStyle CssClass="rowStyle"></RowStyle>
<HeaderStyle CssClass="headerBar" ForeColor="#ffffff"></HeaderStyle>
<AlternatingRowStyle CssClass="altRow" />
<Columns>
<asp:TemplateField HeaderText="Edit" HeaderStyle-Width="5%" HeaderStyle-ForeColor="#f2f2f2"
HeaderStyle-Font-Bold="false" HeaderStyle-Font-Size="Small">
<ItemTemplate>
<asp:ImageButton ID="imgEdit" runat="server" ImageUrl="~/images/icon_edit.png" CausesValidation="false"
CommandArgument='<%#Eval("RangeId") %>' CommandName="Edit" />
</ItemTemplate>
<EditItemTemplate>
<asp:ImageButton ID="imgUpdate" runat="server" ImageUrl="~/images/icon_update.png"
CausesValidation="false" CommandArgument='<%#Eval("RangeId") %>' CommandName="Update" />
<asp:ImageButton ID="ImageCancel" runat="server" ImageUrl="~/images/icon_cancel.png"
CausesValidation="false" CommandArgument='<%#Eval("RangeId") %>' CommandName="Cancel" />
</EditItemTemplate>
<HeaderStyle Font-Bold="False" Font-Size="Small" ForeColor="#F2F2F2" Width="5%" />
</asp:TemplateField>
<%-- <asp:TemplateField HeaderText="Copy" HeaderStyle-Width="3%" HeaderStyle-ForeColor="#f2f2f2"
HeaderStyle-Font-Bold="false" HeaderStyle-Font-Size="Small">
<ItemTemplate>
<asp:ImageButton ID="imgCopy" runat="server" CausesValidation="false" CommandArgument='<%#Eval("RangeId") %> '
CommandName="Copy" ImageUrl="~/images/icon_copy.png" />
</ItemTemplate>
<HeaderStyle Font-Bold="False" Font-Size="Small" ForeColor="#F2F2F2" Width="3%" />
</asp:TemplateField>--%>
<asp:TemplateField HeaderText="Delete" HeaderStyle-Width="3%" HeaderStyle-ForeColor="#f2f2f2"
HeaderStyle-Font-Bold="false" HeaderStyle-Font-Size="Small">
<ItemTemplate>
<asp:ImageButton ID="imgDelete" runat="server" CausesValidation="false" OnClientClick="return DeleleAlert();"
CommandArgument='<%#Eval("RangeId") %>' CommandName="Remove" ImageUrl="~/images/icon_delete.png" />
</ItemTemplate>
<HeaderStyle Font-Bold="False" Font-Size="Small" ForeColor="#F2F2F2" Width="3%" />
</asp:TemplateField>
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
<%--<asp:TemplateField HeaderText="Description">
<EditItemTemplate>
<asp:TextBox ID="txtDescription" runat="server" CssClass="textbox"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblDescription" runat="server" Text='<%# Bind("Description") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>--%>
<asp:TemplateField HeaderText="Country" SortExpression="Country">
<EditItemTemplate>
<asp:DropDownList ID="ddlCountry" runat="server" CssClass="dropdown" AutoPostBack="True"
AppendDataBoundItems="true" DataTextField="CountryName" DataValueField="CountryId">
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblCountry" runat="server" Text='<%# Bind("CountryName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="State/Province" SortExpression="Region">
<EditItemTemplate>
<asp:DropDownList ID="ddlRegion" runat="server" CssClass="dropdown" AutoPostBack="True"
AppendDataBoundItems="true" DataTextField="RegionName" DataValueField="GeographicRegionId">
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblRegion" runat="server" Text='<%# Bind("RegionName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Base/Facility" SortExpression="Facility">
<EditItemTemplate>
<asp:DropDownList ID="ddlFacility" runat="server" CssClass="dropdown" AutoPostBack="True"
AppendDataBoundItems="true" DataTextField="BaseName" DataValueField="BaseId">
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblFacility" runat="server" Text='<%# Bind("BaseName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="MapName" HeaderText="Map Name" SortExpression="MapName" />
<asp:TemplateField HeaderText="Map">
<HeaderStyle HorizontalAlign="center" />
<ItemTemplate>
<asp:HyperLink ID="HyperLink_Map1" runat="server" NavigateUrl='<%# DataBinder.Eval(Container.DataItem,"MapPath") %>'
Text="">
<asp:Image ID="Image1" runat="server" ImageUrl='<%# DataBinder.Eval(Container.DataItem,"MapPath") %>'
Width="50px" Height="50px" />
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="LowLat" HeaderText="Low Latitude" SortExpression="LowLat" />
<asp:BoundField DataField="LowLong" HeaderText="Low Longitude" SortExpression="LowLong" />
<asp:BoundField DataField="HighLat" HeaderText="High Latitude" SortExpression="HighLat" />
<asp:BoundField DataField="HighLong" HeaderText="High Longitude" SortExpression="HighLong" />
<asp:TemplateField HeaderText="Status">
<ItemTemplate>
<asp:Button ID="RangeSetup_Status" CssClass="page-btn blue" CausesValidation="false"
CommandArgument='<%#Eval("RangeId") %> ' runat="server" Text="Status" OnClick="btnRangeStatus_Click">
</asp:Button>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
C# 后端
protected void GridViewRangeSetup_UpdateRow(object sender, GridViewUpdateEventArgs e)
{
WISSModel.WISSEntities context = new WISSModel.WISSEntities();
//TextBox txtDescription = (TextBox)GridViewRangeSetup.Rows[e.RowIndex].Cells[3].Controls[0];
GridViewRow row = GridViewRangeSetup.Rows[e.RowIndex];
//TextBox txtDescription = row.FindControl("txtDescription") as TextBox;
//DropDownList ddlCountry = (DropDownList)GridViewRangeSetup.Rows[e.RowIndex].Cells[4].Controls[0];
DropDownList ddlCountry = row.FindControl("ddlCountry") as DropDownList;
DropDownList ddlRegion = row.FindControl("ddlRegion") as DropDownList;
DropDownList ddlFacility = row.FindControl("ddlFacility") as DropDownList;
//TextBox mapName = row.FindControl("MapName") as TextBox;
//TextBox lowLat = row.FindControl("LowLat") as TextBox;
//TextBox lowLong = row.FindControl("LowLong") as TextBox;
//TextBox highLat = row.FindControl("HighLat") as TextBox;
//TextBox highLong = row.FindControl("HighLong") as TextBox;
int rangeID = Convert.ToInt32(GridViewRangeSetup.DataKeys[e.RowIndex].Values[0].ToString());
if (rangeID > 0)
{
var rangeEdit = (from r in context.Ranges
where r.RangeId == rangeID
select r).SingleOrDefault();
//rangeEdit.Description = txtDescription.Text.Trim();
rangeEdit.Description = e.NewValues["Description"].ToString();
rangeEdit.CountryId = Convert.ToInt32(ddlCountry.SelectedValue);
rangeEdit.GeographicRegionId = Convert.ToInt32(ddlRegion.SelectedValue);
rangeEdit.BaseId = Convert.ToInt32(ddlFacility.SelectedValue);
rangeEdit.RangeMap.MapName = e.NewValues["MapName"].ToString();//mapName.Text.Trim();
rangeEdit.RangeMap.LowLat = Convert.ToDouble(e.NewValues["LowLat"].ToString());//Convert.ToDouble(lowLat.Text.Trim());
rangeEdit.RangeMap.LowLong = Convert.ToDouble(e.NewValues["LowLong"].ToString());//Convert.ToDouble(lowLong.Text.Trim());
rangeEdit.RangeMap.HighLat = Convert.ToDouble(e.NewValues["HighLat"].ToString());//Convert.ToDouble(highLat.Text.Trim());
rangeEdit.RangeMap.HighLong = Convert.ToDouble(e.NewValues["HighLong"].ToString());//Convert.ToDouble(highLong.Text.Trim());
context.SaveChanges();
}
else // copy row
{
WISSModel.Range range2 = new WISSModel.Range
{
//Description = txtDescription.Text.Trim(),
CountryId = Convert.ToInt32(ddlCountry.SelectedValue),
GeographicRegionId = Convert.ToInt32(ddlRegion.SelectedValue),
BaseId = Convert.ToInt32(ddlFacility.SelectedValue),
isDeleted = false
};
context.AddObject("Ranges", range2);
context.SaveChanges();
}
GridViewRangeSetup.EditIndex = -1;
LoadData();
}
尝试下面的链接,有用于网格视图编辑的代码:
http://www.codeproject.com/Articles/37207/Editable-Gridview-with-Textbox-CheckBox-Radio-Butt