Как получить командный аргумент о привязке данных строки - PullRequest
0 голосов
/ 27 августа 2011

Я связываю значения с 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 может ли кто-нибудь мне помочь

Ответы [ 4 ]

2 голосов
/ 27 августа 2011

es @ Мухаммад Ахтар был прав. Это должно быть похоже на

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

Укажите свойство Datakey в вашей сетке данных.и вы можете получить доступ к значению ключа данных текущей строки, как указано выше

добавить имя ключа данных к вашему выражению

ID_COLUMN должен быть столбцом из таблицы данных, которую вы привязываетев gridview

Введите этот код для строки Created

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
    }
}
1 голос
/ 27 августа 2011

Не использовать Удалить стандартное имя команды, в противном случае вам нужно обработать событие "RowDeleting".

Взгляните на этот пример:

.aspx markup

<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 голосов
/ 31 января 2018
 <ItemTemplate>
     <asp:LinkButton ID="lnkDetails" runat="server" CommandName="Details" CommandArgument='<%#Eval("ID")%>'
                                                    ToolTip="View Details">View</asp:LinkButton>
 </ItemTemplate>

защищенный void gvmain_RowCommand (отправитель объекта, GridViewCommandEventArgs e) {

    if (e.CommandName == "Details")
    {
        int id = Convert.ToInt32(e.CommandArgument);
        Response.Redirect("~/MEMBER/UploadedDocList.aspx?id=" + id, false);
    }
}
0 голосов
/ 27 августа 2011

Поскольку вы не проходите command Argument, это всегда даст null reference. Попробуйте это под вашим контролем, где бы вам ни понадобилось.

<asp:LinkButton ID="LinkButton1" runat="server" Text='<%#Eval("AttachmentName") %>' CommandName='<%#Eval("AttachmentName")%>' CommandArgument='<%#Eval("AttachmentId") %>'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...