2015-06-08 5 views
0

У меня есть DataGrid, который отображает информацию о трейлерах. Я решил изменить столбец местоположения на DropDownList, чтобы местоположение можно было легко изменить. Но я не уверен, как заполнить DropDownList.Как заполнить DropDownList в DataGrid?

<asp:DataGrid runat="server" CssClass="tblResults" OnItemDataBound="dgList_ItemCreated" OnRowDataBound="OnRowDataBound" AllowSorting="true" OnSortCommand="dgTrailer_Sort" ID="dgTrailers" DataKeyField="ID" AutoGenerateColumns="false"> 
      <Columns> 
       <asp:BoundColumn DataField="TrailerOwner" HeaderText="Owner" SortExpression="TrailerOwner"></asp:BoundColumn> 
       <asp:BoundColumn DataField="TrailerMake" HeaderText="Trailer Make" SortExpression="TrailerMake"></asp:BoundColumn> 
       <asp:TemplateColumn HeaderText="Trailer Location"> 
        <itemtemplate> 
         <asp:DropDownList ID="ddlLocation" runat="server"> 
         </asp:DropDownList> 
       </itemtemplate> 
       </asp:TemplateColumn> 
       </Columns> 
     </asp:DataGrid> 

У меня есть DropDownList для местоположенияуже (так называемый ddlTrailerLocation), так что пользователь может выбрать место для трейлера, а затем DataGrid отображает всю эту информацию.

protected void PopulateDDLs() 
{ 
    DataSet dsTrailerLocation = DataUtils.GetAllGenSmall(Company.Current.CompanyID, "Description", "", 1, false, "Description", false, "TrailerLocationNOCODE", 0); 
    if (dsTrailerLocation.Tables[0].Rows.Count > 0) 
    { 
     ddlTrailerLocation.DataSource = dsTrailerLocation; 
     ddlTrailerLocation.DataValueField = "Description"; 
     ddlTrailerLocation.DataTextField = "Description"; 
     ddlTrailerLocation.DataBind(); 
     ddlTrailerLocation.Items.Insert(0, new ListItem("Select One", "0")); 
    } 
    else 
    { 
     ddlTrailerLocation.Items.Insert(0, new ListItem("No Locations Entered", "0")); 
    } 
} 

protected void dgList_ItemCreated(object sender, DataGridItemEventArgs e) 
    { 
    DropDownList ddlTrailerLocation = e.Item.FindControl("ddlLocation") as DropDownList; 
     DataSet dsTrailerLocation = DataUtils.GetAllGenSmall(Company.Current.CompanyID, "Description", "", 1, false, "Description", false, "TrailerLocationNOCODE", 0); 
     if (ddlTrailerLocation != null) 
     { 
      ddlTrailerLocation.DataSource = dsTrailerLocation; 
      ddlTrailerLocation.DataValueField = "Description"; 
      ddlTrailerLocation.DataTextField = "Description"; 
      ddlTrailerLocation.DataBind(); 
     } 
} 

EDIT Добавлен код в защищенной недействительным dgList_ItemCreated. В раскрывающемся списке отображается местоположение, но это неправильное местоположение. {

+0

вы гугл первый? –

+0

Да, но я не знаю, что делать, потому что выпадающий список уже существует, поэтому я должен был предоставить новый dropdownlist в datagrid другой идентификатор. Я не уверен, какой код C# мне нужно заполнить. – user2026041

+0

Вы можете указать любой идентификатор имени в виде сетки и получить доступ с другим именем псевдонима в событии строки databound. вот пример http://www.aspsnippets.com/Articles/How-to-populate-DropDownList-in-GridView-in-ASPNet.aspx –

ответ

1

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

<asp:DataGrid runat="server" CssClass="tblResults" OnItemDataBound="dgList_ItemCreated" OnRowDataBound="OnRowDataBound" AllowSorting="true" OnSortCommand="dgTrailer_Sort" ID="dgTrailers" DataKeyField="ID" AutoGenerateColumns="false"> 
       <HeaderStyle CssClass="tblResultsHeader" /> 
       <AlternatingItemStyle BackColor="#EEEEEE" /> 
       <Columns> 
        <asp:HyperLinkColumn ItemStyle-CssClass="loading" DataNavigateUrlFormatString="Trailer.aspx?TrailerID={0}" DataNavigateUrlField="ID" DataTextField="Reg" HeaderText="Registration" SortExpression="Reg"></asp:HyperLinkColumn> 
        <asp:BoundColumn DataField="TrailerOwner" HeaderText="Owner" SortExpression="TrailerOwner"></asp:BoundColumn> 
        <asp:BoundColumn DataField="TrailerMake" HeaderText="Trailer Make" SortExpression="TrailerMake"></asp:BoundColumn> 
        <asp:TemplateColumn HeaderText="Trailer Location"> 
         <itemtemplate> 
          <asp:DropDownList ID="ddlTrailerLoc" runat="server"> 
          </asp:DropDownList> 
          <asp:HiddenField ID="hdlTrailerLoc" runat="server" Value='<%#Eval("LocationId")%>' /> 
        </itemtemplate> 
        </asp:TemplateColumn> 
        <asp:BoundColumn DataField="Year" HeaderText="Year" SortExpression="Year"></asp:BoundColumn> 
        <asp:BoundColumn DataField="TrailerNumber" HeaderText="Trailer Number" SortExpression="TrailerNumber"></asp:BoundColumn> 
        <asp:BoundColumn DataField="DateOfLastService" HeaderText="Last Service" SortExpression="DateOfLastService"></asp:BoundColumn> 
        <asp:BoundColumn DataField="DateOfNextService" HeaderText="Next Service" SortExpression="DateOfNextService"></asp:BoundColumn> 
        <asp:BoundColumn DataField="IsActive" HeaderText="Is Active" SortExpression="IsActive"></asp:BoundColumn> 
        </Columns> 
      </asp:DataGrid> 

Пожалуйста связать раскрывающиеся и установите значение на данные сетки события «ItemDataBound», как показано ниже

protected void dgList_ItemCreated(object sender, DataGridItemEventArgs e) 
    { 
     if (e.Item.ItemType != ListItemType.Header && e.Item.ItemType != ListItemType.Pager && e.Item.ItemType != ListItemType.Footer) 
     { 
      int count = 1; 
      foreach (TableCell c in e.Item.Cells) 
      { 
       bool b = Convert.ToBoolean(((DataRowView)e.Item.DataItem).Row["IsActive"]); 

       if (count == e.Item.Cells.Count) 
       { 
        c.Text = "<input DISABLED type=\"checkbox\" " + ((b) ? "checked" : "") + "/>"; 
       } 
       DateTime dt = new DateTime(); 
       if (DateTime.TryParse(c.Text, out dt)) 
       { 
        c.Text = dt.ToShortDateString(); 
       } 
       count++; 
      } 

      DropDownList ddlTrailerLocation = e.Item.FindControl("ddlTrailerLoc") as DropDownList; 
      //DataSet dsTrailerLocation = DataUtils.GetAllGenSmall(Company.Current.CompanyID, "Description", "", 1, false, "Description", false, "TrailerLocationNOCODE", 0); 
      if (ddlTrailerLocation != null) 
      { 
       PopulateDDLs(ddlTrailerLocation); 
       //set the value in dropdown 
       HiddenField hdlTrailerLoc = e.Item.FindControl("hdlTrailerLoc") as HiddenField; 
       if (hdlTrailerLoc != null) 
       { 
        ddlTrailerLocation.SelectedValue = hdlTrailerLoc.Value; 
       } 
      } 
     } 
    } 

Ниже коды для привязки местоположение раскрывающегося

protected void PopulateDDLs(DropDownList ddlTrailerLoc) 
{ 
    DataSet dsTrailerLocation = DataUtils.GetAllGenSmall(Company.Current.CompanyID, "Description", "", 1, false, "Description", false, "TrailerLocationNOCODE", 0); 
    if (dsTrailerLocation.Tables[0].Rows.Count > 0) 
    { 
     ddlTrailerLoc.DataSource = dsTrailerLocation; 
     ddlTrailerLoc.DataValueField = "Description"; 
     ddlTrailerLoc.DataTextField = "Description"; 
     ddlTrailerLoc.DataBind(); 
     ddlTrailerLoc.Items.Insert(0, new ListItem("Select One", "0")); 
    } 
    else 
    { 
     ddlTrailerLoc.Items.Insert(0, new ListItem("No Locations Entered", "0")); 
    } 
} 
+0

Я не знаю, что делать для связывания кода. Это то же самое, что и код для PopulateDDL? – user2026041

+0

Пожалуйста, напишите метод PopulateDDLs с помощью одного параметра PopulateDDLs (DropDownList ddlTrailerLocation). Позвольте мне обновить код –

+0

@ DeepakJoshi Я отредактировал свой вопрос, пожалуйста, просмотрите добавленный код. но он не отображает правильное местоположение. – user2026041

1

Я не уверен, что вы на самом деле googled. Я использовал DataSet пару недель назад, и я использовал MSDN для этой проблемы.

sqlDataAdapter1.Fill(dataset1.Tables["Customers"]); 

Обычно вы должны указать имя DataTable для загрузки данных. Если вы передаете имя DataSet вместо конкретной таблицы данных, DataTable с именем Table1 добавляется в набор данных и загружается с результатами из базы данных (в отличие от загрузки данных в существующую DataTable в наборе данных). Дополнительные сведения см. В разделе «Заполнение набора данных с помощью DataAdapter».

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