Привязка данных к DropDownList в GridView - PullRequest
0 голосов
/ 30 мая 2018

Я знаю, что эта тема много освещалась, но я не могу найти решение своей проблемы.

Я пытался использовать SqlDataSource для создания привязки поля, используя следующее руководство, но я следую каждому шагу, а затем в конце опция привязки поля становится серой.https://msdn.microsoft.com/en-us/library/ms178294.aspx

Итак, я перешел к попытке закодировать DropDownList в GridView, но в настоящее время я не получаю никаких данных, сгенерированных в DDL.Не уверен, что добавить дальше.

Ниже приведен мой код для GridView, я пытаюсь заставить ddlCategory отображать все категории из моей таблицы категорий.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    DataKeyNames="FileID" DataSourceID="filenameTableDataSource"
    EnableModelValidation="True" Style="text-align: center">
    <Columns>
        <asp:CommandField ShowEditButton="True" />
        <asp:BoundField DataField="FileID" HeaderText="FileID" InsertVisible="False" ReadOnly="True" SortExpression="FileID" />
        <asp:BoundField DataField="Filename" HeaderText="Filename" SortExpression="Filename" />
        <asp:TemplateField HeaderText="Category" SortExpression="Category">
            <ItemTemplate>
                <asp:Label ID="Category" runat="server" Visible="false" />
                <asp:DropDownList ID="ddlCategory" runat="server">
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
        <%-- <asp:BoundField DataField="Category" HeaderText="Category" SortExpression="Category" />--%>
        <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
        <asp:CheckBoxField DataField="IsPublished" HeaderText="IsPublished" SortExpression="IsPublished" />
        <asp:CheckBoxField DataField="IsArchived" HeaderText="IsArchived" SortExpression="IsArchived" />
    </Columns>
</asp:GridView>

Это оператор SQL, который я использую для получения данных для GridView:

SELECT Files.FileID, Files.CategoryID, Files.Filename, Files.Description,
       Files.IsPublished, Files.IsArchived, Categories.Description AS Category 
FROM Files INNER JOIN Categories ON Files.CategoryID = Categories.CategoryID

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 30 мая 2018

Я бы предложил следующее: создайте метод, который будет возвращать ваш DataSet из базы данных, как показано ниже:

private DataSet GetData(string query)
{
string conString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
SqlCommand cmd = new SqlCommand(query);
using (SqlConnection con = new SqlConnection(conString))
{
    using (SqlDataAdapter sda = new SqlDataAdapter())
    {
        cmd.Connection = con;
        sda.SelectCommand = cmd;
        using (DataSet ds = new DataSet())
        {
            sda.Fill(ds);
            return ds;
        }
    }
}
}

Привязать GridView к вашему источнику данных, например:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
    GridView1.DataSource = GetData("SELECT ContactName, Country FROM Customers");
    GridView1.DataBind();
}
}

Событие on GridView1_RowDataBound для gridview выполняется следующим образом:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
    //Find the DropDownList in the Row.
    DropDownList ddlCategory= (e.Row.FindControl("ddlCategory") as DropDownList);
    ddlCategory.DataSource = GetData("SELECT DISTINCT Country FROM Category");
    ddlCategory.DataTextField = "CategoryName";
    ddlCategory.DataValueField = "CategoryId";
    ddlCategory.DataBind();




}
}
0 голосов
/ 30 мая 2018

Вы можете использовать событие OnRowDataBound:

protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{  
    DropDownList ddlCategory= (e.Row.FindControl("ddlCategory") as DropDownList);
    ddlCategory.DataSource = GetData("SELECT DISTINCT CategoryName,CategoryId FROM Categories");
    ddlCategory.DataTextField = "CategoryName";
    ddlCategory.DataValueField = "CategoryId";
    ddlCategory.DataBind();
}
}
0 голосов
/ 30 мая 2018

У меня была похожая борьба, вам нужно использовать что-то в этом роде private void BindDropDownList ()

        DataView dv = mgr.GetItemSeriesMaster().DefaultView; //how to filter data
        dv.RowFilter = ProductQueryFilter;
        Dropdownlist1.DataSource = dv;

        Dropdownlist1.DataTextField = "Description"; // the items to be displayed in the list items
        Dropdownlist1.DataValueField = "Id"; // the id of the items displayed
        Dropdownlist1.DataBind();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...