Получение данных из чекбокса внутри столбца шаблона сетки вида asp.net - PullRequest
2 голосов
/ 20 ноября 2008

Это кажется чем-то простым, но я не могу понять это! Я пытаюсь заставить работать двустороннюю привязку данных на странице ASP.net с флажком в качестве одного из столбцов. Как я могу получить обновленные значения (из флажков) обратно из gridview ?????

Вот мой тип данных:

[Serializable]
public class UserRequirements 
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string UserId { get; set; }
    public string Email { get; set; }

    public bool ThingRequired { get; set; }
}

Моя разметка выглядит примерно так:

<form id="form1" method="post" runat="server" >
    <asp:GridView ID="UserTable" runat="server" AutoGenerateColumns="false" >
    <Columns>
        ...
        <asp:TemplateField HeaderText="Required ?">
            <ItemTemplate>
                <asp:CheckBox id="chkBox1" runat="server"  on
                Text ="Required"
                checked='<%# DataBinder.Eval(Container.DataItem,"ThingRequired")  %>'>
                </asp:CheckBox>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    </asp:GridView>
    <asp:Button id="thebutton" Text="Save Changes" OnClick="UpdateRequirements" runat="server"  CausesValidation=false  />  
</form>

Мой код выглядит примерно так:

    List<UserRequirements > _userList = new List<UserRequirements >();

    protected void Page_Load(object sender, EventArgs e)
    {
        _userList = data_layer.GetUserRequirments();


        this.UserTable.DataSource = _userList;
        this.UserTable.DataBind();      
    }

В конце концов, я назову что-то вроде этого, но я не знаю, куда это должно идти или как вернуть значения из таблицы:

void UpdateRequirements(object sender, EventArgs e)
{
    _userList = ???????????? // How do I get the data?
    data_layer.UpdateUserRequirements( _userList );
} 

Ответы [ 2 ]

2 голосов
/ 20 ноября 2008

foreach (GridViewRow di в GridView1.Rows) { HtmlInputCheckBox chkBx = (HtmlInputCheckBox) di.FindControl ("chkBox1");

        if (chkBx != null && chkBx.Checked)
        {
             /// put your code here
        }
    }
1 голос
/ 20 ноября 2008

попробуйте что-то вроде этого, чтобы получить значение при изменении:

protected void OnCheckedChanged(object sender, EventArgs e)
{    
   CheckBox c = (CheckBox)sender as CheckBox;    
   string checkBoxId = c.ID;    
   bool checkBoxValue = c.Checked;
   //update database
}

[EDIT]

Если вы хотите получить все значения из строк в сетке за один раз, вам нужно будет привязать флажки, используя Id для строки или элемента в вашем списке пользовательских требований, поэтому в вашей сетке сделайте что-то вроде этого :

<asp:CheckBox ID="<%# Eval('Id') %>" />

затем при обратной передаче итерируйте элементы в списке UserRequirements, соответствующие идентификатору объекта / элемента с идентификаторами флажков в сетке ... что-то вроде этого:

        foreach (UserRequirement item in Requirements)
        {
            Control c = grid.FindControl(item.Id);
            CheckBox cbx = c as CheckBox;
            if (cbx != null)
            {
                bool value = cbx.Checked;
                //update db
            }
        }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...