2011-08-27 48 views
0

的行數據綁定事件我綁定的值的GridView這樣如何獲得GridView控件

<asp:GridView ID="grdViewAttachment_Client" runat="server" Width="615px" AutoGenerateColumns="False" GridLines="None" CssClass="grid-view" OnRowCommand="grdViewAttachment_Client_RowCommand"> 
<Columns> 
<asp:TemplateField HeaderText="Attachment" HeaderStyle-CssClass="hedding2"> 
<ItemTemplate> 
<asp:LinkButton ID="lnkbtnAttachments" runat="server" Text="Delete" CommandName="Delete" CommandArgument='<%#Eval("AttachmentId") %>' ></asp:LinkButton> 
</ItemTemplate> 
<HeaderStyle/> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Attachment" HeaderStyle-CssClass="hedding2"> 
<ItemTemplate> 
<%--<asp:LinkButton ID="lnkbtnAttachments" runat="server" Text='<%#Eval("AttachmentName") %>' CommandName='<%#Eval("AttachmentName")%>' CommandArgument='<%#Eval("AttachmentId") %>'></asp:LinkButton>--%> 
<asp:LinkButton ID="LinkButton1" runat="server" Text='<%#Eval("AttachmentName") %>' CommandName='<%#Eval("AttachmentName")%>' ></asp:LinkButton> 
</ItemTemplate> 
<HeaderStyle/> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="AssignedTo" HeaderStyle-CssClass="hedding2"> 
<ItemTemplate> 
<asp:Label ID="lblAssignedTo" Text='<%#Eval("AssignedTo") %>' runat="server" CssClass="body-text"></asp:Label> 
</ItemTemplate> 
<HeaderStyle /> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="CreationDate" HeaderStyle-CssClass="hedding2"> 
<ItemTemplate> 
<asp:Label ID="lblCreationDate" Text='<%#Eval("CreationDate") %>' runat="server" CssClass="body-text"></asp:Label> 
</ItemTemplate> 
<HeaderStyle /> 
</asp:TemplateField> 
</Columns> 
</asp:GridView> 

在我行命令事件我寫的命令參數代碼

protected void grdViewAttachment_Client_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     SqlConnection m_Conn = new SqlConnection(Utilities.ConnectionString()); 
       SqlCommand m_oCmd; 
     int iStID = int.Parse(e.CommandArgument.ToString()); 
     int pk = 0; 
     int.TryParse(e.CommandArgument as string, out pk); 
     string strStoreProcName = null; 
     DataSet oDS1 = new DataSet(); 
     if (e.CommandName == "Delete") 
     { 
      strStoreProcName = StoredProcNames.Attachments_uspDeleteAttachs; 
      m_oCmd = new SqlCommand(strStoreProcName, m_Conn); 
      m_oCmd.CommandType = CommandType.StoredProcedure; 
      m_oCmd.Parameters.Add("@AttachmentId", SqlDbType.Int).Value = Convert.ToInt32(e.CommandArgument.ToString()); 
      m_Conn.Open(); 
      m_oCmd.ExecuteNonQuery(); 
      AttachmentDetails(); 
     } 
     string fname = e.CommandName.ToString(); 

    } 

但我沒有得到價值,我得到的例外Input string was not in correct format可以幫助我的任何人

+0

您應該檢查e.CommandArgument的值。 –

+0

傳遞命令參數的空值 – hmk

回答

2

es @Muhammad阿赫塔爾是正確的。它應該像

int iStID = Convert.ToInt32(gridName.DataKeys[Convert.ToInt32(e.CommandArgument.ToString())].Value); 

在數據網格中指定Datakey屬性。您可以訪問當前行的數據鍵值如上

添加datakey名到您的發言

ID_COLUMN應該從數據表中的列,您綁定到GridView的

寫這行代碼創建

protected void grdViewAttachment_Client_RowCreated(object sender, GridViewRowEventArgs e) 
{ 

    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     LinkButton lnkbtnAttachments=(LinkButton)e.Row.FindControl("lnkbtnAttachments");  
     lnkbtnAttachments.CommandArgument = e.Row.RowIndex.ToString(); 

     // similarly write for other controls 
    } 
} 
+0

如何在gridview中指定datakey列DataKeyNames =「AttachmentId」它是正確的 – hmk

+1

+0

@ ghmk是的,你是對的 –

0

因爲你沒有通過command Argument這總會給null reference。在你需要的地方試試這個控制。

<asp:LinkButton ID="LinkButton1" runat="server" Text='<%#Eval("AttachmentName") %>' CommandName='<%#Eval("AttachmentName")%>' CommandArgument='<%#Eval("AttachmentId") %>'> 
1

不要使用刪除標準命令名,否則你必須處理「RowDeleting」事件。

看看該樣品:

的.aspx標記

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
       onrowcommand="GridView1_RowCommand"> 
       <Columns> 
        <asp:TemplateField> 
         <ItemTemplate> 
          Data : 
          <asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>'></asp:Label> 
          <asp:LinkButton ID="btnDelete" runat="server" 
           CommandArgument='<%# Eval("No") %>' CommandName="Del">Delete</asp:LinkButton> 
          <asp:LinkButton ID="btnShow" runat="server" CommandArgument='<%# Eval("No") %>' 
           CommandName="Show">Show</asp:LinkButton> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
</asp:GridView> 

代碼後面

public class Data 
    { 
     public int No { get; set; } 
     public string Name { get; set; } 
    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      List<Data> list = new List<Data>() 
      { 
       new Data(){ No=1, Name="A"}, 
       new Data(){ No=2, Name="B"}, 
       new Data(){ No=3, Name="C"} 
      }; 
      GridView1.DataSource = list; 
      GridView1.DataBind(); 
     } 
    } 
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "Del") 
     { 
      Response.Write("Delete : " + e.CommandArgument); 
     } 
     else 
      if (e.CommandName == "Show") 
      { 
       Response.Write("Show : " + e.CommandArgument); 
      } 

    } 
0
<ItemTemplate> 
    <asp:LinkButton ID="lnkDetails" runat="server" CommandName="Details" CommandArgument='<%#Eval("ID")%>' 
                ToolTip="View Details">View</asp:LinkButton> 
</ItemTemplate> 

保護無效gvmain_RowCommand(對象發件人,GridViewCommandEventArgs E) {

if (e.CommandName == "Details") 
    { 
     int id = Convert.ToInt32(e.CommandArgument); 
     Response.Redirect("~/MEMBER/UploadedDocList.aspx?id=" + id, false); 
    } 
}