2012-03-16 3 views
0

Я использую элемент жерех GridView, чтобы сделать поиск по базе данных и вернуть некоторые данные, используяИспользование жерех: GridView для заполнения формы

<asp:GridView ID="storedRecordsGrid" AutoGenerateSelectButton="true" emptydatatext="No data available." runat="server"> 

Так у меня есть GridView, который получает popolated и каждая строка имеет свой собственное событие выбора. Когда пользователь выбирает строку, я хочу использовать данные в этой строке для заполнения texboxes на моей странице.

protected void OnRowCommand(GridViewCommandEventArgs e) 
     { 

     } 

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

protected void OnRowCommand(GridViewCommandEventArgs e) 
     { 
     mytextbox.text=datagridcolumn.value 
     } 

Я использую .net 2.0 и мой C# код, прямо сейчас выглядит следующим образом.

private DataTable fillGrid(string dComplainantFName,string dComplainantlName) 
    { 
     string server = ""; 
     using (SqlConnection cnx = new SqlConnection(server)) 
     using (SqlCommand cmd = new SqlCommand("ComplaintReportLookUp", cnx) { CommandType = CommandType.StoredProcedure }) 
     using (DataTable dt = new DataTable()) 
     { 
      cmd.Parameters.AddWithValue("@fName", dComplainantFName); 
      cmd.Parameters.AddWithValue("@lName", dComplainantlName); 
      try 
      { 
       cnx.Open(); 
       dt.Load(cmd.ExecuteReader()); 
       cnx.Close(); 
       return dt; 
      } 
      catch (Exception ex) 
      { 
       throw new Exception("Error executing MyProcedureName.", ex); 
      } 
     } 

    } 
    protected void executeGrid(object sender, EventArgs e) 
     { 
      storedRecordsGrid.DataSource = this.fillGrid(dComplainantFName.Text,dComplainantLName.Text); 
      storedRecordsGrid.DataBind(); 
     } 
    protected void OnRowCommand(GridViewCommandEventArgs e) 
     { 

     } 

Спасибо за вашу помощь


Спасибо Тиму за помощь это то, что в конечном итоге работает для меня.

protected void gridSelectedIndexChanged(Object sender, EventArgs e) 
    { 
    var row = ((GridView)sender).SelectedRow; 
    //var cell1Text = row.Cells[0].Text; // should be your autogenerated select cell 
    dComplainantFName.Text = row.Cells[1].Text.Replace("&nbsp;", ""); // Text in column 1 (the first column of your DataTable) 
    dComplainantLName.Text = row.Cells[2].Text.Replace("&nbsp;", ""); // Text in column 2 (the second column of your DataTable) 
    dComplainantMName.Text = row.Cells[3].Text.Replace("&nbsp;", ""); 
    dComplainantAddress.Text = row.Cells[4].Text.Replace("&nbsp;", ""); 
    dComplainantCity.Text = row.Cells[5].Text.Replace("&nbsp;", ""); 
    dComplainantState.Text = row.Cells[6].Text.Replace("&nbsp;", ""); 
    dComplainantZip.Text = row.Cells[7].Text.Replace("&nbsp;", ""); 
    dComplainantPhone.Text = row.Cells[8].Text.Replace("&nbsp;", ""); 
    storedRecordsGrid.Visible = false; 
    } 

ответ

1

Используйте SelectedIndexChanged событие в GridView, в и в других мероприятиях, как RowCommand или SelectedIndexChangingSelectedRow свойство является null. Это также соответствующее событие для вашего требования:

protected void Grid_SelectedIndexChanged(Object sender, EventArgs e) 
{ 
    var row = ((GridView)sender).SelectedRow; 
    var cell1Text = row.Cells[0].Text; // is your autogenerated select cell(String.Empty) 
    var cell2Text = row.Cells[1].Text; // Text in column 2 (the first column of your DataTable) 
    var cell3Text = row.Cells[2].Text; // Text in column 3 (the second column of your DataTable) 
    TextBox1.Text = cell2Text; // etc. 
} 

Примечания: Если вы не установили AutoGenerateSelectButton к истинному и использовали TemplateFields, вы должны использовать FindControl на SelectedRow, чтобы получить ссылку на ваше управление ,

Если вы по-прежнему настаивают на использовании RowCommand, вы можете получить выбранную строку из CommandArgument:

protected void Grid_RowCommand(Object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Select") 
    { 
     var rowIndex = int.Parse(e.CommandArgument.ToString()) 
     var selectedRow = ((GridView)sender).Rows[rowIndex]; 
     var cell1Text = selectedRow.Cells[0].Text; // is your autogenerated select cell(String.Empty) 
     var cell2Text = selectedRow.Cells[1].Text; // Text in column 2 (the first column of your DataTable) 
    } 
} 
+0

Ваше первое предложение работал как шарм я не уверен, где вы видели, я использовал rowcommand, но я был в состоянии чтобы datagrid заполнил текстовые поля, просто добавив onselectedindexchanged (другая команда для 2.0?) и привязка моих текстовых полей к массиву ячеек. Большое вам спасибо за вашу помощь. –

+0

@MichaelCole: Ваш обработчик событий OnRowCommand показал мне это. Btw, событие [SelectedIndexChange было уже там в 2.0] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.selectedindexchanged%28v=vs.80%29.aspx). Я рад слышать, что это работает. –

+0

О, да, я бросил это и использовал метод, который вы мне показали. я выложу код, который я закончил с использованием, поэтому, если кто-то использует в качестве ссылки его не путать –