Як ми можемо знайти елемент керування у рядку команди grid view?

Як я можу знайти елемент керування у рядку з режиму перегляду сітки?

3

10 Відповіді

Насправді немає рядка в GridViewCommandEventArgs, тому вам потрібно буде отримати рядок з контексту іменування команд джерела

GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer);

то ви зможете скористатись

TextBox myTextBox = row.FindControl("MyTextBoxId") as TextBox;

Сподіваюся, це допомагає!

17
додано
Контроль невизначений?
додано Автор HQtunes.com, джерело

якщо ви використовуєте LinkButton

 LinkButton ctrl = e.CommandSource as LinkButton;
   if (ctrl != null)
    {
        GridViewRow row = ctrl.Parent.NamingContainer as GridViewRow;
        TextBox txtDescription = (TextBox)row.FindControl("txtDescription");
    }
2
додано
GridViewRow row = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);

Label lblProdId = (Label)row.FindControl(“lblproductId”);
1
додано

Якщо ви хочете знайти елемент керування у рядку, скористайтеся командою Use

controlname controlId=(controlname)e.FindControl("controlId"); 

Наприклад, якщо ви хочете знайти lable з ідентифікатором lbl , то використовуйте ..

Label lbl = (Label)e.Row.FindControl("lbl");
0
додано

Якщо ви використовуєте usercontrols у вашій таблиці елементів gridview, то ((Control) e.CommandSource) .NamingContainer може не повернути вашу gridviewrow.

У цьому випадку я використовував наступний код для отримання поточного рядка:

var c = ((Control) e.CommandSource).NamingContainer;
while (c.GetType() != typeof(GridViewRow))
{
    c = c.Parent;
}
var currentRow = (GridViewRow) c;

Це не дуже добре, але це працює.

0
додано

Ви можете використовувати "CommandArgument" у своєму керуванні "CommandName". Тут 2 аргументи:


Тоді в коді позаду ви можете отримати аргументи:

string[] arg = e.CommandArgument.ToString().Split(';');
int index = Convert.ToInt16(arg[0]);
string idinterlocuteur = arg[1];

І тепер ви аргументи, щоб знайти ваші елементи керування:

CheckBox Check1 = GridView1.Rows[index].FindControl("MyCheckboxinrow") as CheckBox;
0
додано

            
                 
                DD-MM-YYYY
            
            
               <%#Eval("NextAttend") %>
            
            
        

        
            
                 <div class="btn-group">

                
                    
               
                    
                    </div>
            
            
                <div class="btn-group">
                
                    

                    </div>
            
            
        


 if (e.CommandName == "UpdateStat")
        {
            HiddenField IDHiddenField=(HiddenField)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("IDHiddenField");
            TextBox CurrentStatDesTextBox=(TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("CurrentStatDesTextBox");}
0
додано
Будь-ласка, надайте деяку інформацію/деталі з кодом
додано Автор jhhoff02, джерело

GridViewRow gvr = (GridViewRow) ((Control) e.CommandSource) .NamingContainer;             int rowIndex = gvr.RowIndex;

        string Cat_name = (GridView1.Rows[rowIndex].FindControl("TxtName") as TextBox).Text;
0
додано
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)    
{

GridViewRow gvr = (GridViewRow)((Control)e.CommandSource).NamingContainer;
int rowIndex = gvr.RowIndex;

string Cat_name = (GridView1.Rows[rowIndex].FindControl("TxtName") as TextBox).Text;

}
0
додано
 GridViewRow row = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);                    
                    HiddenField hdMeasurementId = ((HiddenField)row.FindControl("hdMeasurementId"));
0
додано
Хоча цей фрагмент коду може вирішити проблему, ми віддаємо перевагу відповідь з деяким поясненням, чому/як вони працюють.
додано Автор Joshua Drake, джерело
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug