1

我希望在一页上有gridview,如下所示

<asp:GridView ID="gvDoctorList" runat="server" 
           AutoGenerateColumns="False" 
           DataSourceID="SqlDataSource1" 
           AllowPaging="True" 
           AllowSorting="True" 
           AutoGenerateEditButton="true" 
           AutoGenerateDeleteButton="true">
     <Columns>
         <asp:TemplateField>
              <ItemTemplate>
                   <asp:CheckBox runat="server" 
                                 ID="chk" 
                                 OnCheckedChanged="chk_CheckedChanged"
                                 AutoPostBack="true"/>
                   <asp:Label runat="server" ID="lblPID" Visible="false" Text='<%# Eval("PatientId") %>'></asp:Label>
              </ItemTemplate>
         </asp:TemplateField>
         <asp:BoundField DataField="PatientId" 
                         HeaderText="PatientId" 
                         SortExpression="PatientId" />
         <asp:BoundField DataField="firstname" 
                         HeaderText="firstname" 
                         SortExpression="firstname" />
         <asp:BoundField DataField="lastname" 
                         HeaderText="lastname" 
                         SortExpression="lastname" />
          <asp:BoundField DataField="sex" 
                         HeaderText="sex" 
                         SortExpression="sex" />
     </Columns>
  </asp:GridView>
  <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                     ConnectionString="<%$ ConnectionStrings:MyDatabaseConnectionString %>"  
                     SelectCommand="SELECT [PatientId],[firstname], [lastname], [sex] FROM [PatientDetails]">
  </asp:SqlDataSource>

现在我将会话放在复选框更改事件上,如下所示

 protected void chk_CheckedChanged(object sender, EventArgs e)
 {
         GridViewRow row = ((GridViewRow)((Control)sender).Parent.Parent);
        string requestid =  gvDoctorList.DataKeys[row.RowIndex].Value.ToString();
        string cellvalue = row.Cells[1].Text;
        Session["pId"] = cellvalue;   
             }

在另一个页面上,我想获取 session 的值,所以我在另一个页面上做了如下操作

protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["pId"] != null)
        {
            lblsession.Text = Session["pId"].ToString();
        }
        else 
        { 

        }
    }

但问题是,当我调试复选框更改事件的代码时,特别是在会话行上,它向我显示对象引用未设置为对象实例的错误。

我不明白有什么问题?

我想要做的是从用户已选中复选框的gridview中获取患者ID的值....将选定的值发送到另一个页面并希望将患者ID插入到sql表中。

请提供任何带有编码或其他好主意的示例。

4

3 回答 3

0

我不知道您的复选框是如何触发的,没有 AutoPostback="True"。此外,每次回发都会丢失数据源。您可以将 Id 存储在隐藏字段或复选框的 value 属性中,以在您的事件中检索它。

编辑:查看这些链接:http ://www.daveparslow.com/2007/08/assigning-value-to-aspnet-checkbox.html 为什么我不能在 asp:CheckBox 上设置值?

于 2013-10-08T13:06:51.370 回答
0

您不是在为键“pId”设置值并尝试访问其他键“patientid”吗?使用相同的键来设置和获取 Session 的值。

于 2013-10-08T12:16:53.573 回答
0
 protected void chk_CheckedChanged(object sender, EventArgs e)
    {
        GridViewRow Row = ((GridViewRow)((Control)sender).Parent.Parent);
       // string requestid = grdrequestlist.DataKeys[Row.RowIndex].Value.ToString();
        string cellvalue=Row.Cells[1].Text;
        Session["pId"] =cellvalue;    

    }

ON Page_Load 事件

protected void Page_Load(object sender, EventArgs e)
    {
        //if (Session["patientid"] != null) you have defined pID as session variable 
        // so check for pID not patientid
       string patientID =Convert.Tostring(Session["pId"]);
         if(!string.IsNullOrEmpty(patientID ))
        {
            lblsession.Text = patientID;
                  //Session["pId"].ToString();
        }
        else 
        { 

        }
    }

更新

抱歉,我错过了您的问题的某些部分,作为您的网格视图,您使用了 BoundField,因此您可以将单元格值获取为 row.Cells[index].text

string PatientID= row.Cells[0].Text;
Session ["pID"] = PatientID;

- 希望能帮助到你

于 2013-10-08T12:17:52.107 回答