我是asp新手。我将所选行传输到数据表中时出现以下错误。我希望所有行都作为标签。
string EmployeeID = (row.Cells[3].FindControl("M_ID")).ToString();
和堆栈跟踪,
[NullReferenceException:对象引用未设置为的实例 对象。] _Default.vilemail_Click(Object sender,EventArgs e)in d:\ Vinoth \ Msmtest \ vessel_inti.aspx.cs:79个
System.Web.UI.WebControls.Button.OnClick(EventArgs e)+111
System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串 eventArgument)+110
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 eventArgument)+10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)+13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) 1565
我知道这并不困难,但我无法解决。
答案 0 :(得分:0)
这样可以防止异常:
string EmployeeID = row.Cells[3].FindControl("M_ID") != null ? (row.Cells[3].FindControl("M_ID")).ToString() : string.Empty;
但是你必须检查哪个条件row.Cells[3].FindControl("M_ID")
获得空值。
答案 1 :(得分:0)
根据您的问题判断,这可能是您所需要的。假设 M_ID 是标签ID,
string EmployeeID = (row.Cells[3].FindControl("M_ID") as Label).Text;
您必须指定要从页面获取的控件类型。在您的情况下,它是一个标签,后跟控件的属性。
答案 2 :(得分:0)
看起来您正在尝试获取员工的Id
。在这种情况下,我更喜欢使用行的Id
键:
<asp:GridView ID="EmployeesGridView" runat="server" DataKeyNames="EmployeeID">
<Columns>
<asp:BoundField DataField="EmployeeID" HeaderText="Employee" />
</Columns>
</asp:GridView>
在这种情况下,当SelectedIndexChanged
事件触发时,你可以得到这样的密钥:
string EmployeeID = EmployeesGridView.SelectedDataKey.Value.ToString();
修改强>
如果您已经有DataKeyName
或者您需要多个值,只需在网格中DataKeyNames
添加所需的所有属性,如下所示:
<asp:GridView ID="EmployeesGridView" runat="server" DataKeyNames="EmployeeID,ID">
<Columns>
<asp:BoundField DataField="EmployeeID" HeaderText="Employee" />
<asp:BoundField DataField="ID" HeaderText="Id" />
</Columns>
</asp:GridView>
你可以这样得到它们:
string EmployeeID = EmployeesGridView.SelectedDataKey.Value.ToString();
string id = EmployeesGridView..SelectedDataKey.Values["ID"].ToString();
请记住,您需要认为这些值是网格的主键,因此您不能拥有多个具有相同值/对的行。