#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 недели, и я все еще борюсь со своим ответом 🙂