2013-10-14 3 views
0

У меня есть GridView, как показано нижеВставьте данные когда пользователь нажимает на кнопки выбора внутри GridView

<asp:GridView ID="gvDoctorList" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" 
          AllowPaging="True" AllowSorting="True" 
          OnSelectedIndexChanged="gvDoctorList_SelectedIndexChanged" OnRowCommand="gvDoctorList_RowCommand" OnRowDataBound="gvDoctorList_RowDataBound"> 
          <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> 
             <asp:Button ID="btnSelect" runat="server" Text="Select" CommandArgument='<%# Eval("PatientId") %>' CommandName = "Select" /> 
            </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> 

<asp:Button ID="btnformatric" runat="server" Text="formatric3d" OnClick="btnformatric_Click" /> 

кодекса за GridView rowcommand как ниже

protected void gvDoctorList_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 

     if (e.CommandName == "Select") 
     { 
      int pID = Convert.ToInt32(e.CommandArgument); 
      Session["PatientId"] = Convert.ToString(e.CommandArgument); 
      //Server.Transfer("Patientstaticformatrix.aspx"); 

      string pIDstr = Convert.ToString(Session["PatientId"]); 
      if (!string.IsNullOrEmpty(pIDstr)) 
      { 
       int patientID = Convert.ToInt32(pID); 

       //string connection = System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString; 
       string sqlquery = "SELECT * FROM [MyDatabase].[dbo].[PatExam] where PId = '" + patientID + "'"; 
       string connection = System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString; 
       using(SqlConnection conn = new SqlConnection(connection)) 
       { 
        //SqlConnection conn = new SqlConnection(con); 
        DataSet ds; 
        ds = new DataSet(); 
        SqlDataAdapter cmpatientexam; 
        conn.Open(); 

        cmpatientexam = new SqlDataAdapter(sqlquery, conn); 
        cmpatientexam.Fill(ds, "PatientExam"); 

        TreeNode pidnode = new TreeNode(); 
        pidnode.Text = pIDstr; 



        foreach (DataRow patrow in ds.Tables["PatientExam"].Rows) 
        { 

          //TreeNode tvpatexam = new TreeNode(); 
          //tvpatexam.Text = patrow["PId"].ToString(); 
          //TreeView1.Nodes.Add(tvpatexam); 

          //for (int i = 0; i < ds.Tables["PatientExam"].Columns["PId"].Count; i++) 
          //if (patrow["PId"].ToString() != DBNull.Value) 
          //{        

           TreeNode childtvpatexam = new TreeNode(); 
           childtvpatexam.Text = patrow["Exam"].ToString(); 
           pidnode.ChildNodes.Add(childtvpatexam); 
           //break; 
          //} 

         //TreeView1.Nodes.Add(tvpatexam); 
        } 

        TreeView1.Nodes.Add(pidnode); 
        ds.Dispose(); 
        cmpatientexam.Dispose(); 
        conn.Close(); 
        conn.Dispose(); 
       } 
      } 
     } 


    } 

кодекса за событие нажатия кнопки является, как ниже

protected void btnformatric_Click(object sender, EventArgs e) 
    { 
     foreach (GridViewRow row in gvDoctorList.Rows) 
     { 
      Button btn = (Button)row.FindControl("Select"); 

      if (btn != null) 
      { 

       string pIDstr = Convert.ToString(Session["PatientId"]); 
       string exam = ((Button)sender).Text; 

       SqlCommand cmd = new SqlCommand("INSERT INTO [dbo].[PatExam]([PId],[Exam]) VALUES (@pid,@exam)", con); 

       if (con.State == ConnectionState.Closed) 
       { 
        con.Open(); 
       } 
       try 
       { 
        cmd.Connection = con; 
        cmd.Parameters.AddWithValue("@pid", pIDstr); 
        cmd.Parameters.AddWithValue("@exam", exam); 



        cmd.ExecuteNonQuery(); 
       } 
       catch (Exception ex) 
       { 
        Response.Write("Error Occured: " + ex.Message.ToString()); 
       } 
       finally 
       { 
        con.Close(); 
        cmd.Dispose(); 
       }   
      } 
     } 
} 

Я хочу вставить значение, которое выбрано из сетки, с помощью кнопки выбора и inse rt, который выбрал значение при событии нажатия кнопки .... но с указанным выше кодом он не работает ...

Может ли кто-нибудь предложить мне какую-то другую идею или, если возможно, с этим кодом, тогда как ... вы можете дать мне код для него .... Большое спасибо

ответ

1

Вы можете добавить скрытое поле и сохранить rowindex Gridview в скрытом поле. В btnformatric_Click вы можете получить строку по индексу и получить данные. Разметка:

<asp:HiddenField ID="hdnRowIndex" runat="server" Value ="" /> 
<asp:Button ID="btnformatric" runat="server" Text="formatric3d" OnClick="btnformatric_Click" /> 

В коде gvDoctorList_RowCommand метод:

protected void gvDoctorList_RowCommand(object sender, GridViewCommandEventArgs e) 
     { 

      if (e.CommandName == "Select") 
      { 
       int pID = Convert.ToInt32(e.CommandArgument); 
       Session["PatientId"] = Convert.ToString(e.CommandArgument); 
       //Server.Transfer("Patientstaticformatrix.aspx"); 
       GridViewRow gvr = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer); 
       hdnRowIndex.Value = gvr.RowIndex.ToString(); 
... ... ...  ... ... ...  ... ... ...  ... ... ...  ... ... ... 

btnformatric_Click метод:

protected void btnformatric_Click(object sender, EventArgs e) 
{ 
    int rowIndex = 0; 
    if (int.TryParse(hdnRowIndex.Value, out rowIndex)) 
    { 
     //Get the row 
     GridViewRow row = gvDoctorList.Rows[rowIndex];    
     Button btn = (Button)row.FindControl("Select"); 

     if (btn != null) 
     { 

      string pIDstr = Convert.ToString(Session["PatientId"]); 
      string exam = ((Button)sender).Text; 

      SqlCommand cmd = new SqlCommand("INSERT INTO [dbo].[PatExam]([PId],[Exam]) VALUES (@pid,@exam)", con); 

      if (con.State == ConnectionState.Closed) 
      { 
       con.Open(); 
      } 
      try 
      { 
       cmd.Connection = con; 
       cmd.Parameters.AddWithValue("@pid", pIDstr); 
       cmd.Parameters.AddWithValue("@exam", exam); 

       cmd.ExecuteNonQuery(); 
      } 
      catch (Exception ex) 
      { 
       Response.Write("Error Occured: " + ex.Message.ToString()); 
      } 
      finally 
      { 
       con.Close(); 
       cmd.Dispose(); 
      } 
     } 
    } 
} 
+0

Я стараюсь код я, что хочу сообщить вам, что у меня есть кнопка не IMAGEBUTTON так я имеют изменение в строке GridViewRow gvr = (GridViewRow) (((Button) e.CommandSource) .NamingContainer); но все же, когда я отлаживаю событие нажатия кнопки, значение btn равно null .... что было бы неправильно ....? – Pratik

+0

он отлично работает ... спасибо – Pratik

0

Я полагаю, что вас интересует вставка записи на основе выбранного значения PatientID из GridView?

То, что вы хотите сделать, это начать, установив DataKeyNames свойство GridView, чтобы PatientID так:

<asp:GridView ID="gvDoctorList" runat="server" DataKeyNames="PatientID" ...> 

Тогда в обработчике btnformatric_Click событий вы можете получить выбранное PatientID значение через gvDoctorList.SelectedValue, как:

string pIDstr = gvDoctorList.SelectedValue.ToString(); 

Конечно, прежде чем делать это, вы должны проверить, чтобы пользователь выбрал пациента из сетки (а именно, gvDoctorList.SelectedIndex >= 0).

Смежные вопросы