2014-10-23 6 views
0

Я чувствую, что мне не хватает чего-то очевидного здесь, но я просто не понимаю. У меня есть gridview с столбцом поля шаблона, где у меня есть кнопка и скрытое поле. Я пытаюсь получить ссылку как на кнопку, так и на скрытое поле в строке databound, так как ярлык кнопки и commandargument и т. Д. Изменяются в зависимости от других данных строки.Ссылка на ссылку GridView на rowdatabound

Если я поместил точку останова в область, указанную в приведенном ниже коде, я вижу, что скрытое поле назначается правильно, но кнопка отсутствует. Что мне здесь не хватает?

GridView.aspx

<asp:GridView ID="gvCurrentQueueStatus" runat="server" AutoGenerateColumns="False" 
    OnRowDataBound="gvCurrentQueueStatus_RowDataBound"> 
    <Columns> 
     <asp:TemplateField ItemStyle-HorizontalAlign="Center" HeaderText="Service Controls"> 
       <ItemTemplate> 
        <asp:Button ID="btnSubmitCommand" runat="server" Text="Control" OnClick="btnSubmitCommand_Click" /> 
        <asp:HiddenField ID="hdnQueueNumber" runat="server" Value='<%# Eval("ReportQueueNumber") %>' /> 
       </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 

</asp:GridView> 

GridView.aspx.cs

protected void gvCurrentQueueStatus_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 

     Button controlButton = (Button)e.Row.FindControl("btnSubmitCommand"); // FindControl fails 
     HiddenField hdnQueueNumber = (HiddenField)e.Row.FindControl("hdnQueueNumber"); // FindControl succeeds 

     // Other stuff 
    } // breakpoint here, successfully finds htnQueueNumber, but not btnSubmitCommand 
} 
+0

сделать поиск Google, но в то же время это должно помочь вам точку в правильном направлении .. также e.Row.FindControl должен быть '(кнопка) .GridView.row.FindControl («ваш контроль, чтобы найти») ' http://stackoverflow.com/questions/9915086/how-can-i-get-the-value-of-hidden-field-in-grid -view – MethodMan

+1

@DJKRAZE GridView.row недействителен в этом контексте, поэтому я не уверен, как это будет работать. Кроме того, в этой связанной статье есть эквивалентный ответ для hiddenField (который, как я сказал в моем вопросе, у меня работает), но по какой-то причине он не работает для кнопки. – Kritner

ответ

0

Так что, по-видимому, моя кнопка фактически назначалась должным образом, она просто не сообщала как таковую, когда мы перебирали переменную в моем отладчике.

Я на самом деле не сумасшедший, отладчик Visual Studio, однако, нужен и старый, «вы пытались отключить его и снова».

К сожалению о том, что те, которые помогли разобраться в моем вопросе: 3

1

Попробуйте это:

Button controlButton = e.Row.FindControl("btnSubmitCommand") as Button ; 

Или попробуйте так:

 foreach (GridViewRow row in gvCurrentQueueStatus.Rows) { 
    Button controlButton = (Button)gvCurrentQueueStatus.Rows[row.RowIndex].FindControl("btnSubmitCommand"); 
    } 
+0

Это почти то же самое, что я делал немного другой синтаксис, не так ли? Я не уверен, что такое формулировка, но разве это не два метода приведения конкретного объекта? В любом случае я пробовал это и не добился успеха :( – Kritner

+0

@ Kritner обновил мой ответ – Rex

+0

К сожалению, это тоже не работает. По-видимому, по какой-то причине FindControl не работает в GridViewRow для кнопок – Kritner

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