Флажок в GridView

#c#

#c#

Вопрос:

мой следующий код не работает должным образом…код примерно таков: когда пользователь устанавливает флажок, прикрепленный к представлению в виде таблицы, эта информация должна быть передана в таблицу, и, как только данные будут отправлены в базу данных, будут созданы два представления в зависимости от условия, установлен флажок или нет .. и результат представления должен отображаться в поле метки.(В ASP.NET С ИСПОЛЬЗОВАНИЕМ C # И DB-MSSQL)

 CREATE TABLE yourBaseTable
  (
   ID INT IDENTITY(1, 1)
       PRIMARY KEY ,
   Payload NVARCHAR(255) NOT NULL ,
   Discriminator TINYINT NOT NULL
              CHECK ( Discriminator IN ( 0, 1 ) )
              DEFAULT ( 0 )
  ) ;
GO

CREATE VIEW yourView1
AS
  SELECT ID ,
      Payload ,
      Discriminator
  FROM  yourBaseTable
  WHERE  Discriminator = 0 ;
GO

CREATE VIEW yourView2
AS
  SELECT ID ,
      Payload ,
      Discriminator
  FROM  yourBaseTable
  WHERE  Discriminator = 1 ;
GO
  

и у меня тоже проблема с интерфейсом

Ниже приведено описание метода ‘checkBox_checkedChange’ .. и я не получаю ни строчки кода

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

 protected void CheckBox1_CheckedChanged(object sender, EventArgs e) {

ClearCheckBoxes();

CheckBox checkbox = (CheckBox)sender;

checkbox.Checked = true;

GridViewRow row = (GridViewRow)checkbox.NamingContainer; // WHAT DOES THIS CODE MEANS ..

DisplayMessage(row.Cells[1].Text);

}
  

Комментарии:

1. Попробуйте отформатировать свой код. ( edit откройте сообщение, выберите код и используйте {} кнопку.)

Ответ №1:

Я не совсем уверен, о чем вы спрашиваете в первой части. Что касается вопроса внизу:

 GridViewRow row = (GridViewRow)checkbox.NamingContainer;//WHAT DOES THIS CODE MEANS ..
  

«.NamingContainer» получит объект, содержащий ваш флажок, в этом случае ваш флажок находится внутри GridViewRow. Вам все равно придется преобразовать объект в GridViewRow, что является целью «(GridViewRow)». Вы присваиваете его локальной переменной row, чтобы вы могли продолжать работать с ней.

Комментарии:

1. описание первой части приведено над ней … код является ее внутренней частью .. то есть базой данных и таблицей… ОК, забыть it…my проблема в том, что я использую GridView и checkbox внутри it..as как только пользователь установит флажок, эта информация должна переместиться в базу данных, а информация о флажке, который не установлен, должна отображаться во внешнем интерфейсе (поле метки)

Ответ №2:

Хорошо, я никогда не имел дела с представлениями через SQL. Я обрабатываю представления с помощью своих запросов. Вот пример того, как я бы справился с этим. Я думаю, он делает то, что вы ищете. Это мой полный код. Вы должны иметь возможность скопировать вставку, чтобы увидеть ее запуск, за исключением того, что я использую linq to sql. Возможно, вам потребуется перевести мои запросы на SQL, но я настоятельно рекомендую Linq-to-SQL. С ним намного проще работать.

страница aspx:

 <form id="form1" runat="server">
<div>
    <asp:GridView ID="grdSelected" runat="server" AutoGenerateColumns="False" EnableModelValidation="True" HeaderStyle-BackColor="#1B940A">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Label ID="lblCheckedID" runat="server" Text='<%# Bind("ID") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:CheckBox ID="chkSelected" runat="server" Checked='<%# Bind("Discriminator") %>'
                        OnCheckedChanged="chkSelected_CheckedChanged" AutoPostBack="true" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("Payload") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

    <asp:GridView ID="grdNotSelected" runat="server" AutoGenerateColumns="False" EnableModelValidation="True" HeaderStyle-BackColor="#84090C">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Label ID="lblCheckedId" runat="server" Text='<%# Bind("ID") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:CheckBox ID="chkNotSelected" runat="server" Checked='<%# Bind("Discriminator") %>'
                        OnCheckedChanged="chkSelected_CheckedChanged" AutoPostBack="true" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("Payload") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
</div>
</form>
  

Код, лежащий в основе:

 public partial class _Default : System.Web.UI.Page
{
    SampleConnectionClassDataContext sampleContext = new SampleConnectionClassDataContext();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindCheckedGrid();
            BindNonCheckedGrid();
        }
    }

    private void BindCheckedGrid()
    {
        var checkedItems = from check in sampleContext.CheckboxSamples
                           where check.Discriminator == true
                           select check;

        grdSelected.DataSource = checkedItems;
        grdSelected.DataBind();
    }

    private void BindNonCheckedGrid()
    {
        var checkedItems = from check in sampleContext.CheckboxSamples
                           where check.Discriminator == false
                           select check;

        grdNotSelected.DataSource = checkedItems;
        grdNotSelected.DataBind();
    }


    protected void chkSelected_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox checkbox = (CheckBox)sender;
        GridViewRow row = (GridViewRow)checkbox.NamingContainer;
        Label lblID = (Label)row.FindControl("lblCheckedID");

        var existingEntry = from s in sampleContext.CheckboxSamples
                            where s.ID == int.Parse(lblID.Text)
                            select s;

        existingEntry.First().Discriminator = checkbox.Checked;
        sampleContext.SubmitChanges();

        BindCheckedGrid();
        BindNonCheckedGrid();

    }
}
  

Надеюсь, это поможет 🙂

Комментарии:

1. Пожалуйста, примите ответы, если они отвечают на ваш вопрос. у вас есть 7 вопросов, и ни один из них не принят. Счастливого развития 🙂

2. я принял ответы, но на этот раз я не получаю правильного ответа .. проблема с флажком в gridview … прошло 2 недели, и я все еще борюсь со своим ответом 🙂