2013-07-24 64 views
0

我有一個GridView的按鈕「刪除」。 我需要獲得值或索引的單元格[3]。 但與GridView1.SelectedRow.Cells[3].Text;它返回null。 有人幫我嗎?我不想使用JavaScript。獲取列值GridView

我的aspx:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" GridLines="None" 
     CssClass="table table-bordered table-striped"> 
     <Columns> 
      <asp:BoundField DataField="DisplayName" HeaderText="Display Name" /> 
      <asp:BoundField DataField="UserName" HeaderText="User Name" /> 
      <asp:BoundField DataField="Email" HeaderText="Email" /> 
      <asp:BoundField DataField="Name" HeaderText="Name" /> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:Button ID="btnDelete" runat="server" Text="Delete" OnClick="btnDelete_OnClick" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

我的.cs:

protected void btnDelete_OnClick(object sender, EventArgs e) 
{ 
    using (objConexao = new SqlConnection(strStringConexao)) 
    { 
     SqlConnection oConn = new SqlConnection(); 
     SqlCommand oCommand = new SqlCommand(); 
     string strConn = ConfigurationManager.ConnectionStrings["XXX"].ConnectionString; 
     oConn.ConnectionString = strConn; 
     oCommand.Connection = oConn; 
     oCommand.CommandText = "proc_Delete"; 
     oCommand.CommandType = CommandType.StoredProcedure; 

     SqlParameter myParam = oCommand.Parameters.Add("@UserRequestor", SqlDbType.NVarChar); 
     myParam.Value = User; 

     SqlParameter myParam2 = oCommand.Parameters.Add("@UserName", SqlDbType.NVarChar); 
     myParam2.Value = GridView1.Columns[3].ToString(); 

     oConn.Open(); 
     oCommand.ExecuteNonQuery(); 
     oConn.Close(); 
    } 
} 
+0

是你從你的'btnDelete_OnClick'方法提供的.cs代碼? – wlyles

+0

是的!我添加了這些信息。 – CaioVJesus89

+0

嘗試使用'e.Item.FindControl(「controlname」);'查找控件/單元格 – PiLHA

回答

2

試試這個:

protected void btnDelete_OnClick(object sender, EventArgs e) 
{ 
    Button btn = (Button)sender; 
    GridViewRow row = (GridViewRow)btn.NamingContainer 
    string desiredText = row.Cells[3].Text; 
    using (objConexao = new SqlConnection(strStringConexao)) 
    { 
     // ... 
     myParam2.Value = desiredText; 
     // ... 
    }   
} 

NamingContainer會得到你所點擊Button的行

我不認爲SelectedRow屬性起作用,因爲單擊按鈕不構成選擇行。這是通過CommandName="Select"上的一個按鈕完成的,或者在GridView上用AutoGenerateSelectButton="true"完成。 This question提供了一個解釋。

+0

@ CaioVJesus89對不起,我誤解了你的問題。查看我的編輯 – wlyles

+0

現在,它的工作原理! Tks,Wlyles! – CaioVJesus89

+0

@ CaioVJesus89我添加了一些信息來幫助您理解爲什麼您的原始代碼不起作用 – wlyles

0

這是一段時間,但我知道你可以使用datakeynames這個。

在標記添加您要訪問

<asp:GridView ID="GridView1" DataKeyNames="Email" runat="server" AutoGenerateColumns="false" GridLines="None" 
    CssClass="table table-bordered table-striped"> 

那麼你應該能夠得到與該行指數爲這樣的價值任何價值的關鍵。

GridView1.DataKeys[3].Value.ToString() 

這已經有一段時間了,所以你可能要玩這個。

Here's an article with more information, and how to have more than one datakey

+0

發生錯誤「索引超出範圍必須爲非負值且小於集合的大小 參數名稱:索引「 – CaioVJesus89

+0

我剛剛測試了代碼,我發佈的內容是正確的。所以你的問題在別處。代碼命中時您需要進行調試。 GridView1.DataKeys數組是否爲空?網格是否填充?這是在ajax回發期間嗎?數據鍵是否正確?主要是,你必須確保網格中有行,並且datakey數組不是空的。 – Smeegs