对象引用未设置为对象标签的实例

时间:2013-12-30 13:47:54

标签: c# asp.net

我是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

我知道这并不困难,但我无法解决。

3 个答案:

答案 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();

请记住,您需要认为这些值是网格的主键,因此您不能拥有多个具有相同值/对的行。