Як праверыць, правяраецца Ці Сцяжок у выглядзе сеткі дадзеных або няма

Як я магу праверыць для Bool стан сцяжка, які знаходзіцца ў DataGridView . Я хацеў бы мець True калі правяраецца і , калі ён быў зняты. Ці можа адзін дапамагчы мне.

Is it possible to handle this in dataGridView_CellContentClick

3

5 адказы

Гэтае імя трохі на старонках MSDN для DataGridView тут .

У прыватнасці, яны кажуць:

<Р> Для клікаў у DataGridViewCheckBoxCell, гэтая падзея адбываецца да таго, як   праверыць значэнне змены скрынкі, так што калі вы не хочаце, каб вылічыць   Чаканае значэнне на аснове бягучай кошту, звычайна вы будзеце апрацоўваць   падзея DataGridView.CellValueChanged замест гэтага. Паколькі гэта падзея   адбываецца толькі тады, калі зададзены карыстальнікам значэнне прыхільнік, што   Звычайна гэта адбываецца, калі фокус пакідае клетку, вы павінны таксама апрацоўваць   DataGridView.CurrentCellDirtyStateChanged падзея. У гэтым апрацоўшчыку, калі   бягучая вочка ўяўляе сабой сцяжок клеткі, выклічце DataGridView.CommitEdit   спосаб і перадаць у Commit значэнне.

Таму яны рэкамендуюць супраць выкарыстання падзей тыпу CellClick (так як яны ніколі не націснуць значэнне, пакуль вы не пакінеце вочка), але замест таго, каб выкарыстоўваць CurrentCellDirtyStateChanged і метад CommitEdit.

Такім чынам, вы ў канчатковым выніку з:

dataGridView1.CurrentCellDirtyStateChanged += new EventHandler(dataGridView1_CurrentCellDirtyStateChanged);
dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView1_CellValueChanged);

void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1.Columns[e.ColumnIndex].Name == "CB")
    {
        MessageBox.Show(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());    
    }
}

void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

І як для атрымання праверанага значэння - гэта толькі значэнне ўласцівасць DataGridViewCheckBoxCell.

Так што калі вы ідзяце:

dataGridView1.Rows[rowindex].Cells[cellindex].Value 

Вы атрымліваеце лагічнае значэнне, якое адпавядае флажка (пасля таго, як змяненне было зусім).

Гэта адзін працуе для мяне Дзякуй Дэвід
дададзена аўтар Dorababu Meka, крыніца

Вы можаце паспрабаваць атрымаць гэта такім чынам, напрыклад, у выпадку, калі вы зацыкленне на сетцы на аснове індэкса вы можаце знайсці праверанае стан.

bool IsChecked = Convert.ToBoolean((dataGridView1[ColumnIndex, RowIndex] as DataGridViewCheckBoxCell).FormattedValue))
0
дададзена
Але згодна з маім патрабаванні гэта заўсёды будзе хлусня , як я праверыць стан у dataGridView_CellContentClick
дададзена аўтар Dorababu Meka, крыніца

Ён працуе на 100%.

 private void grd_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

            grd.CommitEdit(DataGridViewDataErrorContexts.Commit);
            bool Result = Convert.ToBoolean((grd[e.ColumnIndex, e.RowIndex] as DataGridViewCheckBoxCell).Value);
        }
0
дададзена

калі сцяжок вызначаны ў канструктару было б так проста, asreferring да checkbox's імя і праверкі яго «праверыў» ўласцівасць для ісціна/хлусня.

Але я падазраю, што вы дадаеце сцяжок у DataGrid з дапамогай кода?

у гэтым выпадку вы будзеце мець, каб захаваць спасылку на сцяжок Somwhere. Калі я дзе вас я хацеў бы дадаць ўсе галачкі, што я дадаць да DataGrid ў спіс або калі вы хочаце, каб звяртацца да іх па імі я б дадаць іх у слоўнік.

Акрамя таго, можна звязаць падзея з сцяжком Checked_Changed падзеі, выбраўшы яго і націснуўшы на абразок ніта ў панэлі уласцівасцяў і знаходжання CheckedChanged-падзея і двойчы пстрыкнуўшы яго.

у івэнт-код, які вы можаце атрымаць сцяжок пстрыкнулі выканаўшы: CheckBox mycheckbox = адпраўнік, як CheckBox;

а затым адсылаючы да mycheckbox.checked, каб атрымаць лагічнае значэнне для калі яго праверкі ці не.

0
дададзена
Я не магу атрымаць правяраецца ўласцівасць, калі я refered
дададзена аўтар Dorababu Meka, крыніца
Гэта тое, што я кажу чалавеку, калі мы знаходзім з дапамогай DataGridViewCheckBoxCell мы можам атрымаць толькі значэнне не Праверана
дададзена аўтар Dorababu Meka, крыніца
Я прашу ў WinForms
дададзена аўтар Dorababu Meka, крыніца
Не атрымаеце вы можаце адпраўляць мне прыклад кода
дададзена аўтар Dorababu Meka, крыніца
На жаль, C# адчувальны да рэгістра, так вы будзеце мець, каб звярнуцца да «Праверана» (з загалоўнай С) мой дрэнны ...
дададзена аўтар Mats Edvinsson, крыніца
Добра, зараз, калі вы згадалі DataGridViewCheckBoxCell я разумею, што вы маеце на ўвазе. я думаю, што пры наладзе калонкі вы павінны ўсталяваць значэнне ў FalseValue і TrueValue. затым, калі вы звярніцеся да checkbox.Value вы атрымаеце тое, што вы ўвайшлі ў FalseValue, калі яго не спыніць, у адваротным выпадку вы атрымаеце TrueValue. Надзея, што дапамагае :)
дададзена аўтар Mats Edvinsson, крыніца
Тэрэза няма коды для acheiving тое, што я сказаў. Вы сказалі, што вы можаце атрымаць DataGridViewCheckBoxCell.Value правы? калі вы знаходзіцеся ў дызайнера, пстрыкніце правай кнопкай мышы на DataGridView і націсніце кнопку Змяніць слупкі. абярыце сцяжок калонкі і шукаць -Tab «Data» ў правай панэлі і ўвядзіце значэнне ў FalseValue, што вы хочаце атрымаць ад DataGridViewCheckBoxCell.Value, калі сцяжок зняты, а затым увядзіце значэнне ў TrueValue, што вы хочаце атрымаць пасля праверкі
дададзена аўтар Mats Edvinsson, крыніца
і калі вы дадаеце сцяжок з дапамогай кода, які вы можаце зрабіць так: `прыватная пустата dataGridView1_CellContentClick (аб'ект адпраўніка, DataGridViewCellEventArgs е) {вар checkcell = новы DataGridViewCheckBoxCell (); checkcell.FalseValue = FALSE; checkcell.TrueValue = TRUE; dataGridView1 [0, 0] = checkcell;//Даданне сцяжок, калі (((BOOL) ((DataGridViewCheckBoxCell) dataGridView1 [0, 0]). Значэнне) == TRUE) {// Матэрыял, каб зрабіць, калі сцяжок усталяваны}} `
дададзена аўтар Mats Edvinsson, крыніца
хворы пост, што ў якасці новага адказу, таму што наўрад ці чытэльныя.
дададзена аўтар Mats Edvinsson, крыніца
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    var checkcell = new DataGridViewCheckBoxCell();
    checkcell.FalseValue = false;
    checkcell.TrueValue = true;
    checkcell.Value = false;
    dataGridView1[0, 0] = checkcell; //Adding the checkbox

    if (((bool)((DataGridViewCheckBoxCell)dataGridView1[0, 0]).Value) == true)
    {
        //Stuff to do if the checkbox is checked
    }
}
0
дададзена
Але гэта не будзе працаваць, калі я націскаю на сцяжок ўпершыню, калі ён быў у стане некантралюемага. Гэта будзе працаваць, калі сцяжок ў зарэгістраваным стане
дададзена аўтар Dorababu Meka, крыніца
ааа, заўважыў, што. але з маім рэдагаваць гэта працуе. проста дадайце: checkcell.Value = хлусня;
дададзена аўтар Mats Edvinsson, крыніца